logo

Ruby

진정한 상용화급 블록체인 기반시설

GitHub 시작

루비(루비체인) 소개

루비체인(이하 "루비"라고 함)이 상용화급 블록체인 기반시설이다. 루비는 창신적인 이중나선형 분자구조를 적용하고 스마트계약, 다중체인병행, 크로스체인공감, 온체인 빅데이터 메모리, 무감 외부 응용모쥴 파편화 메모리, 신속한 응용이전 등 운행매커니즘을 제공함으로써 전통산업과 전통인터넷의 개발과 사용비용을 낮추어 블록체인의 상용화를 가능하도록 한다. 그의 주요한 기술특성이 다음과 같다.

  • 특성1: 기반층 1080건/초의 거래속도. 노드와 분편을 추가할 경우 100만 건/초의 거래속도를 지원하기 가능
  • 특성2: 디지털자산을 자유롭고 신속하게 발행하고 Dapp를 신속하게 개발하기 가능
  • 특성3: 100% 탈중앙화된 원자거래 및 온체인 자산교환
  • 특성4: 블록생성시간 15초, 건당 데이터거래량이2M까지, 블록당 크기가 16M까지 가능
  • 특성5: 독특한 데이터모쥴, 장면화 스마트계약을 원생적으로 지원, 온체인 데이터입구를 직접 열어주고 모든 기존 개발공구로 루비Dapp를 자유롭게 맞춤형 개발하기 가능
  • 특성6: 크로스체인 자산이체와 교환을 지원, 체인 외부의 화폐종류 데이터의 동기화를 지원, 동기화된 후 루비체인에서 모든 화폐종류간의 거래를 직접 진행하기 가능
  • 특성7: 최초의 상용화급 100% 탈중앙화된 유N*RAID5 외부응용 확장메모리,성능이 탁월하고 전 과정이 무감
  • 특성8: 최초의 온라인 Dapp소프트웨어숍, 완비된 생태발전체계

준비단계

개발자가 루비테스트네트워크를 통해 개발할 수 있거나 루비 맞춤형개발테스트버전(기술특성이 약간의 차이가 있음)을 통해 개발할 수 있다. 개발 완료한 후 루비체인과 연락하여 루비메인넷에 이식할 수 있다. 이하에 루비 맞춤형 개발테스트버전을 예로 들어 소개한다.

루비 맞춤형 개발테스트버전을 다운로드하기

시스템에 대한 요구

소프트웨어에 대한 요구

  • Mac:OS X 10.11+
  • Linux:64비트,Debian 7+,Ubuntu 14.04 +,CentOS 7 +,Fedora 20 +,RHEL 7+
  • Windows:64비트,Win7+

하드웨어에 대한 요구

  • 메모리>1G
  • 하드디스크>2G

설치안내

일반사용자 설치안내

Mac설치

집행Rubychain-Wallet-macosx.dmg

Windows설치

치패키지에 오르쪽 버튼을 클릭하여 관리자신분으로Rubychain-wallet-win64.exe를 집행한다.
설치 완료한 후 단축 아이콘에 오른쪽 버튼을 클릭하여 "호환성"을 선정한 후 관리자신분으로

Linux DEB패키지 설치

sudo dpkg -i Rubychain-Wallet-linux64.deb

Linux RPM 패키지 설치

sudo rpm -ivh Rubychain-Wallet-linux64.rpm

개발자 설치안내

Mac설치

집행Rubychain-Tool-macosx.dmg

Windows설치

설치패키지에 오르쪽 버튼을 클릭하여 관리자신분으로Rubychain-wallet-win64.exe를 집행한다.
설치 완료한 후 단축 아이콘에 오른쪽 버튼을 클릭하여 "호환성"을 선정한 후 관리자신분으로

Linux DEB패키지 설치

sudo dpkg -i Rubychain-Tool-linux64.deb

Linux RPM 패키지 설치

sudo rpm -ivh Rubychain-Tool-linux64.rpm

기본컨셉

  1. 루트노드 테스트네트워크를 설립할 때의 첫번째 노드이고 초기화 설치에 사용된다. 루트노드를 설립한 후 네트워크에서의 모든 노드가 루트노드에 자유롭게 연결할 수 있다.

  2. 주요노드 루트노드와 주요노드는 비트코인의 내장된 연결노드(비트코인이 8개 내장된 연결노드가 있음)와 유사하다. 노드간에 연결을 설치한 후 루트노드나 주요노드가 동시에 장시간동안 오프라인생태 아닌 이상 전체 블록체인네트워크에 영향을 미치지 않는다.

  3. 일반노드 루트노드/주요노드를 제외한 노드를 말한다. 노드프로그램을 실행한 후 프로그램 내의 노드정보를 차례대로 체크하기를 자동적으로 반복하여 내장된 노드를 연결하기 시도할 것이다. 가장 빠른 노드와 연결된 후 전체 네트워크의 기타 노드와 대등한 P2P연결을 구축할 것이고 연결 혹은 대등연결을 구축하기만 하면 전체 네트워크의 존재가 모 노드의 존재에만 더 이상 의지하지 않는다. 위와 같이 정의한 루트노드, 주요노드와 일반노드는 오로지 프라이빗체인 네트워크의 구축과정을 설명하는데만 그렇게 말하고 모든 노드가 연결되기만 하면 서로간에 연결에 있어서 평등하고 탈중앙화되어있다.

3단계로 개발테스트버전을 개발하기

  1. 루트노드 창설 GUI공구를 통해 "현지 신규체인의 루트노드 창설"을 선정한 후 "서비스실행"을 클릭한다.

  1. 주요노드연결을 설치하고 두번째 노드에 연결하도록 한다. "원격연결"을 클릭하여 루트노드, 주소, 입구번호를 입력한 후 "서비스 실행"을 클릭한다.

  1. 일반노드를 설치한다. "일반노드"를 클릭하여 선정한 후 루트노드/주요노드 주소, 입구번호를 입력하고나서 "서비스 실행"을 클릭한다. 주 : 개발테스트버전은 간편화된 연결프로그램을 적용하기 때문에 한 개의 루트노드/주요노드만 설치할 수 있으므로 직접 연결하면 개발을 바로 시작할 수 있다.

위와 같은 3개 단계를 거쳐서 귀하는 테스트체인을 구축 완료하신 후 해당 개발업무를 시작할 수 있다.

루비 개발테스트버전의 관건적인 파라미터

구분 맞춤형 개발테스트버전 파라미터
블록체인 명칭 devruby
네트워크 입구 5113
RPC입구 5112
블록생성 소요시간 30
블록사이즈 4M
발행자산의 최대수량 4
발행자산의 최대치 100000
발행자산의 최소단위 0.000001
데이터모쥴의 최대수량 100
체인 내 응용블록의 데이터당 최대치 512K
에인 외부 응용블록의 최대치 512M
단일한 모쥴의 데이터목록 최대수량 1000
최대의 블록수량 10000
연결, 발송, 수령, 데이터모쥴 창설, 자산창설, 채광, 관리 제한없음
다중적인 사인 지원됨
공감매커니즘 난이도를 조정하지 않는 POW-믿음직하고 무작위하다
초기 생산량 10RUB/블록
보류되는 가상화폐 10000RUB
반감기 5000블록
건당 최소 거래량 제한없음
건당 최대 거래량 100000
체인 내 최소 거래비용 0.0001RUB/KB
체인 외부 데이터 거래비용 0.000001RUB/KB
RUB 최소단위 0.000001

프로그램 개발 및 호출 안내

루비 개발테스트버전의 프라이빗체인을 구축한 후 현지에서 RPC서비스를 자동적으로 실행할 것이고 개발자가 본인이 잘 아는 임의의 프로그래밍언어로 JSON RPC서비스를 호출하는 방식으로 체인과 인터액션하여 Dapp를 개발할 수 있다.

  • JAVA호출은 다음과 같다.

  • JavaSDK

JSON-RPC API 명령어 집합

JSON-RPC 협약 개요

JSON-RPC는 json에 기반한 모든 언어를 지원하는 원격호출협약이다. xml-rpc, webservice 등 파일에 기반한 협약보다 데이터전송격이 작고 hessian, java-rpc등 이진법 협약과 비교할 때 테스트, 실행, 확장 등 면에서 더 쉬어져 매우 뛰어난 원격호출협약이라고 볼 수 있다. 현재 주요 프로그래밍언어에 모두 json-rpc의 실현구조가 들어있다. 

Ruby json-rpc협약이 매우 간단하다.

  1. 원격호출 시 블록체인 노드에 전송하는 양식이 예를 들면 다음과 같다:

    { "method": "showinfo", "configs": [], "id": 1}

    파라미터 설명:

    method:호출방법 명
    configs:방법을 전입하는 파라미터. 파라미터가 없을 경우 []를 전입하도록 한다.
    id:호출식별부호. 한 번의 원격호출과정을 표시하는데 사용한다.
  2. 블록체인 노드에서 호출요청을 받은 후 처리방법을 호출하여 방법의 효과와 결과를 호출자에게 보내주고 데인터양식을 돌려보낸다.

    {"result":{"paytxfee":0,"relayfee":0.1,"rpcport":5112,"maxout":2000000},"error":null,"id":"1"}
    파라미터 설명:

    result:방법반환수치. 반환수치가 없으면 null를 반환한다.
    잘 못 호출했을 때 null를 반환한다.
    error:호출 시 오류가 생긴다. 오류가 없으면 null를 반환한다.
    id:호출식별부호, 호출자가 보내준 식별부호와 일치하다.

    이상은 ruby json-rpc 협약규범인데 매우 간편하고 사이즈가 작으므로 모든 프로그래밍언어의 가뿐한 실현에 도움이 된다.

명령 집행방식

RPC 사용자 명과 암호는 ~/.ruby/devruby/ruby.conf(linux/MAC)혹은 %APPDATA%\RUby\devruby\ruby.conf(Windows)파일에 저장되어있고 rubyi 명령 줄 공구나 DevrubyGUI 공구에 내장된 CLI 인터페이스로 연결할 수 있으며 이러한 공구는 RPC 사용자 명과 암호를 자동적으로 해독하여 이미 실행하고 있는 블록체인에 연결하도록 할 것이다.

  • 방식1 : 단일 명령어 방식 rubyi devruby [command] [parameters...]
  • 방식2 : 인터액션 방식(Windows는 인터액션을 지원하지 않음) rubyi devruby [command] [parameters...]

사용 가능한 API 명령어

블록체인 조회와 제어

명령어: help

  • 파라미터:null/command
  • 설명:사용 가능한 명령어 리스트로 귀환
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpchelp", "method": "help", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
        "result": 

            "== CHAIN ==
            showassets
            showbestblockhash
            showblock
            showblockcount
            showblockhash
            showblocks
            showdatas
            showmem
            showrawmem
            showtips
            showtxout
            showtxoutsetinfo

            == MINE ==
            showmining
            shownethash
            submitblock

            == NET ==
            addnode
            ping
            showallappblockq
            showappblockq
            shownet
            shownode
            showpeer

            == RAWDEALS ==
            addrawchange
            addrawdata
            addrawdeal
            decoderawdeal
            sendrawdeal
            setuprawdeal
            showrawdeal
            signrawdeal

            == TOOL ==
            addcache
            checkmessage
            delcache
            emptymem
            help
            pause
            resume
            setupcache
            setupkeypairs
            setupmulti
            stop
            validaddr

            == WALLET ==
            addmultiaddr
            addnewaddr
            addrawex
            backupwallet
            cancel
            cancelfrom
            completerawex
            decoderawex
            disrawdeal
            dumpprivkey
            dumpwallet
            encryptwallet
            gatherunspent
            importaddr
            importprivkey
            importwallet
            lockunspent
            noorder
            order
            prelockunspent
            prelockunspentfrom
            ratify
            ratifydata
            ratifydatafrom
            ratifyfrom
            sell
            sellasset
            sellassetfrom
            sellfrom
            send
            sendasset
            sendassetfrom
            senddata
            senddatafrom
            sendfrom
            senditem
            senditemfrom
            settxfee
            setupdatamod
            setupdatamodfrom
            setuprawex
            setuprawsendfrom
            showaddrbals
            showaddrdeal
            showaddrdeals
            showaddrs
            showallbals
            showassetdeals
            showbal
            showdatablockitems
            showdataitem
            showdataitems
            showdatakeyitems
            showdatakeys
            showdatakeysumm
            showdatasenderitems
            showdatasenders
            showdatasendersumm
            showdatatxitems
            showdeal
            showlockunspent
            showsinceblock
            showtxoutdata
            showunbal
            showunspent
            showwalletdeal
            showwalletdeals
            signmessage
            walletlock", 
        "error": null, 
        "id": "rpchelp"
    }

명령어: stop

  • 파라미터:null
  • 설명:블록체인 실행을 정지하기
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcstop", "method": "stop", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result": "RUby server stopping", 
            "error": null, 
            "id": "rpcstop"
        }

명령어: pause

  • 파라미터:mining|incoming
  • 설명:블록체인을 잠시 중지,mining incoming공동 사용할 시 쉼표로 간격을 둔다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcpause", "method": "pause", "configs": ["mining,incoming"]}' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"Paused",
            "error":null,
            "id":"rpcpause"
        }

명령어: resume

  • 파라미터:mining|incoming
  • 설명:블록체인을 회복,pause와 배합해서 사용,mining incoming공동 사용할 시 쉼표로 간격을 둔다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcresume", "method": "resume", "configs": ["mining,incoming"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"Resumed",
            "error":null,
            "id":"rpresume"
        }

명령어: emptymem

  • 파라미터:null
  • 설명:메모리를 비우고 이 노드의 메모리 내 확인하지 않는 사무를 삭제한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcemptymem", "method": "emptymem", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"Mempool emptied",
            "error":null,
            "id":"rpcemptymem"
        }

명령어: showmem

  • 파라미터:null
  • 설명:메모리정보를 피드백한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowmem", "method": "showmem", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":{"size":0,"bytes":0},
            "error":null,
            "id":"rpcshowmem"
        }

명령어: addnode

  • 파라미터:1)ip(:port) 2)command
  • 설명:점 대 점 연결을 수동으로 추가하거나 삭제한다1.예:192.168.1.18:5113 2.add|remove|onetry
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcaddnode", "method": "addnode", "configs": ["192.168.1.18:6171", "onetry"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":null,
            "error":null,
            "id":"rpcaddnode"
        }

명령어: shownode

  • 파라미터:1)true|false 2)(ip(:port))
  • 설명:1)true=addnode로 노드를 추가하는 정보를 피드백한다,false=addnode로 노드를 추가하는 리스트를 피드백한다2)ip(:port)를 포함하거나 생략하는 노드
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshownode", "method": "shownode", "configs": [true] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result": 
                [
                    {
                        "addednode": "10.211.55.38:5113", 
                        "connected": true, 
                        "addresses": 
                            [
                                {
                                    "address": "10.21.55.38:5113", 
                                    "connected": "outbound"
                                }
                            ]
                    }
                ], 
            "error": null, 
            "id": "rpcshownode"
        }

명령어: shownet

  • 파라미터:null
  • 설명:연결된 네트워크IP 및 입구 정보를 피드백한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshownet", "method": "shownet", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
      "result": 
        {
            "version": 100000, 
            "subversion": "/RUby:0.2.0.3/", 
            "ProVer": 70002, 
            "localservices": "0000000000000001", 
            "timeoffset": 0, 
            "connections": 1, 
            "networks": 
                [
                  {
                    "name": "ipv4", 
                    "limited": false, 
                    "reachable": true, 
                    "proxy": ""
                  }, 
                  {
                    "name": "ipv6", 
                    "limited": false, 
                    "reachable": true, 
                    "proxy": ""
                  }, 
                  {
                    "name": "onion", 
                    "limited": false, 
                    "reachable": false, 
                    "proxy": ""
                  }
                ], 
            "relayfee": 0.1, 
            "localaddresses": 
                [
                  {
                    "address": "10.211.55.36", 
                    "port": 5113, 
                    "score": 3
                  }, 
                  {
                    "address": "fdb2:2c26:f4e4:0:21c:42ff:fe4d:83e9", 
                    "port": 5113, 
                    "score": 1
                  }, 
                  {
                    "address": "fe80::21c:42ff:fe4d:83e9", 
                    "port": 5113, 
                    "score": 1
                  }
                ]
        }, 
      "error": null, 
      "id": "rpcshownet"
    }

명령어: showpeer

  • 파라미터:null
  • 설명:연결된 기타 노드의 정보를 피드백한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowpeer", "method": "showpeer", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
      "result": [
        {
          "id": 2, 
          "addr": "10.211.55.38:43188", 
          "addrlocal": "10.211.55.36:5113", 
          "services": "0000000000000001", 
          "lastsend": 1533530684, 
          "lastrecv": 1533530684, 
          "bytessent": 13711, 
          "bytesrecv": 12688, 
          "conntime": 1533530190, 
          "pingtime": 0.056358, 
          "version": 70002, 
          "subver": "/RUby:0.2.0.3/", 
          "handlocal": null, 
          "handshake": null, 
          "inbound": true, 
          "startingheight": 0, 
          "banscore": 0, 
          "synced_headers": 19, 
          "synced_blocks": 19, 
          "inflight": [ ], 
          "whitelisted": false
        }
      ], 
      "error": null, 
      "id": "rpcshowpeer"
    }

명령어: showchain

  • 파라미터:null
  • 설명:체인 정보를 나타낸다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowchain", "method": "showchain", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result": {
                "blocks": 22, 
                "headers": 22, 
                "bestblockhash": "00589d80160800f1bf0e8435217148882ba58b8cc8811370c80054ce517f3597"
            }, 
            "error": null, 
            "id": "rpcshowchain"
        }

명령어: showblock

  • 파라미터:1)hash|height 2)옵션:0|1|2|3|4
  • 설명:지정된 hash|height의 블록정보를 조회하고 파라미터 옵션이 0인 경우0:최초 16진법 양식의 블록,1(디폴트):miner주소와 txids리스트를 포함한 블록발취,2|3:모든 거래와 최초 16진법에 관한 보다 많은 정보를 포함한다,4:모든 사무에 대한 상세설명을 포함한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowblock", "method": "showblock", "configs": ["10"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
      "result": {
        "hash": "0061f06e6551d10110f2226f447154d9fe013c6e9a20d7d7e4e3a154251ff35e", 
        "miner": "1RK2Xo56Xn6DJznefCy3x4zKbQYQauHZzA8YAz", 
        "confirmations": 16, 
        "size": 299, 
        "height": 10, 
        "version": 3, 
        "merkleroot": "751737b927e83c606d3772bfeeef8b5df1a8fca19af9d1a97f57a178eb79616f", 
        "tx": [
          "751737b927e83c606d3772bfeeef8b5df1a8fca19af9d1a97f57a178eb79616f"
        ], 
        "time": 1533530397, 
        "nonce": 3, 
        "bits": "2000ffff", 
        "difficulty": 5.96046447753906e-8, 
        "chainwork": "0000000000000000000000000000000000000000000000000000000000000b00", 
        "prevblockhash": "00af1ba6fe08cfacec1165eb20a77e38a6cf4f49026538f2d1ca5a482f036a01", 
        "nextblockhash": "00a24afc1b1f6edfd061f17416269cdf1385cc2d7dc568cb2399d04240265023"
      }, 
      "error": null, 
      "id": "rpcshowblock"
    }

명령어: showblocks

  • 파라미터:1)blocks 2)옵션:true|false,디폴트=true
  • 설명:지정된 관련 블록의 정보를 피드백한다1):string|array|object string:heigt|hash|height array:jason array object 2)true|false
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowblocks", "method": "showblocks", "configs": ["10"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result": [
                {
                "hash": "0061f06e6551d10110f2226f447154d9fe013c6e9a20d7d7e4e3a154251ff35e", 
                "miner": "1RK2Xo56Xn6DJznefCy3x4zKbQYQauHZzA8YAz", 
                "confirmations": 21, 
                "height": 10, 
                "time": 1533530397, 
                "txcount": 1
                }
            ], 
            "error": null, 
            "id": "rpcshowblocks"
        }

명령어: showblockhash

  • 파라미터:height
  • 설명:지정된 높이를 가진 블록의 하시 값을 피드백한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowblockhash", "method": "showblockhash", "configs": [10] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result": "0061f06e6551d10110f2226f447154d9fe013c6e9a20d7d7e4e3a154251ff35e", 
            "error": null, 
            "id": "rpcshowblockhash"
        }

명령어: signmessage

  • 파라미터:1)address|privkey 2)message
  • 설명:메시지 사인
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsignmessage", "method": "signmessage", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N","hello,world"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result": "IFxTfW603Rh6X2Oa0PrNmBvWhjIxT1HHjabrAxhLXn7OC4A5/TmBnpD2bfyUFrHm31K/CyBOr5caQ/B9KHjPj8c=", 
            "error": null, 
            "id": "rpcsignmessage"
        }

지갑 주소와 암호 관리하기

명령어: addnewaddr

  • 파라미터:null
  • 설명:프라이빗 키를 피드백하여 지갑의 새 주소에 추가한다。
  • JSON 실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcaddnewaddr", "method": "addnewaddr", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result": "1YzFG4en2nWE6YSmXDwd3R2N3kxhXhuJapjhuC", 
            "error": null, 
            "id": "rpcaddnewaddr"
        }

명령어: addmultiaddr

  • 파라미터:1.num. 2.["PUBKEY1", ...]
  • 설명:여러 사인이 필요한 주소를 창설하여 지갑에 추가한다
  • JSON RPC실현 참조:
      발송:curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcaddmultiaddr", "method": "addmultiaddr", "configs": [2, ["03174c6e52f7da9046a5d09ae5562d2df0exxxxxxxdae195c723c7aa","0298102aab3caf958xxxxxxxxxx771b507cf2335be6f3fc8daf1da108cef6b07"]] }' -H 'content-type: text/plain;' http://127.0.0.1:5112
    귀환:
      {
        "result": "4QT4CkHKm5eKc3FeVwJHaaMf6PMJ2hMnsbBBLz", 
        "error": null, 
        "id": "rpcaddmultiaddr"
      }

    명령어: setupmulti

  • 파라미터:1.num. 2.["PUBKEY1", ...]
  • 설명:여러 사인이 필요한 주소를 창설하지만 지갑에 추가하지 않는다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsetupmulti", "method": "setupmulti", "configs": [2, ["03174c6e52f7da9046a5d09ae5562d2df0exxxxxxxdae195c723c7aa","0298102aab3caf958xxxxxxxxxx771b507cf2335be6f3fc8daf1da108cef6b07"]] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":
            {
                "address":"4QT4CkHKm5eKc3FeVwJHaaMf6PMJ2hMnsbBBLz",
                "redeemScript":"522103174c6e52f7da9046a5d09ae5562d2df0e729172b14fef69a51dae195c723c7aa210298102aab3caf958614ee7f83b04771b507cf2335be6f3fc8daf1da108cef6b0752ae"
            },
            "error":null,
            "id":"rpcsetupmulti"
        }

명령어: setupkeypairs

  • 파라미터:옵션num.
  • 설명:1 개나 여러 개의 공개 키/프라이빗 키 짝을 생성한다,디폴트1
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsetupkeypairs", "method": "setupkeypairs", "configs": [2] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":[
                {
                    "address":"1TMu81kr2fjq2JfDF9Xt75m8aNDp5mAAmBHPdx",
                    "pubkey":"03569587b7971902bdd75018c10e33454fxxxxxxxxd9d1a26d736",
                    "privkey":"VCs4opJ4MPxKxxxxxxxxrpDFTb5v2k5Dy8ziNP9k9FhCm3d3"
                },
                {
                    "address":"164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m",
                    "pubkey":"033878015bdxxxxxxxxxx1fa854bec0ebb7bccfc89ac0fcd253dc0395f75",
                    "privkey":"V7jNsRaBNjMxxxxxxxxxjUJmKvoshJU1Mo5fdSVq7Qwo3axxg1JF"
                }
            ],
            "error":null,
            "id":"rpcsetupkeypairs"
        }

명령어: showaddrs

  • 파라미터:null
  • 설명:이 노드의 지갑중의 주소에 관한 상세한 정보를 피드백한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowaddrs", "method": "showaddrs", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":[
                {
                    "address":"18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N",
                    "ismine":true,
                    "iswatchonly":false,
                    "isscript":false,
                    "pubkey":"02998a9ba30ed924d8c36xxxxxxxx66ba9b23211914d0a239a525e05a859f",
                    "iscompressed":true,
                    "synchronized":true
                },
                {
                    "address":"1YzFG4en2nWE6YSmXDwd3R2N3kxhXhuJapjhuC",
                    "ismine":true,
                    "iswatchonly":false,
                    "isscript":false,
                    "pubkey":"03174c6e52f7da9046axxxxxxxxx172b14fef69a51dae195c723c7aa",
                    "iscompressed":true,
                    "synchronized":true
                },
                {
                    "address":"4QT4CkHKm5eKc3FeVwJHaaMf6PMJ2hMnsbBBLz",
                    "ismine":false,
                    "iswatchonly":true,
                    "isscript":true,
                    "script":"multisig",
                    "hex":"522103174c6e5xxxxxxxxx5562d2df0e729172b14fef69a51dae195c723c7aa210298102aab3caf958614ee7f83b04771b507cf2335be6f3fc8daf1da108cef6b0752ae",
                    "addresses":[
                        "1YzFG4en2nWE6YSmXDwd3R2N3kxhXhuJapjhuC",
                        "1RK2Xo56Xn6DJznefCy3x4zKbQYQauHZzA8YAz"
                    ],
                    "sigsrequired":2,
                    "synchronized":false,
                    "startblock":59
                }
            ],
            "error":null,
            "id":"rpcshowaddrs"
        }

명령어: dumpprivkey

  • 파라미터:address
  • 설명:address의 프라이빗 키를 도출한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"curltest", "method": "dumpprivkey", "configs": ["1YzFG4en2nWE6YSmXDwd3R2N3kxhXhuJapjhuC"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"VBRQkxxxxxxxxxxxxxxxxxWC82kZ9Ct41f",
            "error":null,
            "id":"curltest"
        }

명령어: importprivkey

  • 파라미터:1)[privkey1,privkey2,…] 2)옵션:label
  • 설명:프라이빗 키나 그의 숫자조합을 도입하여 지갑에 추가해서 관련 주소를 생성한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcimportprivkey", "method": "importprivkey", "configs":["VCs4opJ4MPxKfgUxxxxxxxxxxxxDy8ziNP9k9FhCm3d3"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":null,
            "error":null,
            "id":"rpcimportprivkey"
        }

명령어: importaddr

  • 파라미터:address(es)
  • 설명:address를 지갑에 추가하여(프라이빗 키 없음) 1 개나 여러 개 읽기전용계좌를 창설한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcmimportaddr", "method": "importaddr", "configs": ["1YzFG4en2nWE6YSmXDwd3R2N3kxhXhuJapjhuC "] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":null,
            "error":null,
            "id":"rpcmimportaddr"
        }

명령어: backupwallet

  • 파라미터:루트
  • 설명:wallet.dat 지갑파일을 백업한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcbackupwallet", "method": "backupwallet", "configs": ["/home/username/"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":null,
            "error":null,
            "id":"rpcbackupwallet"
        }

명령어: dumpwallet

  • 파라미터: filename
  • 설명: 지갑중의 모든 프라이빗 키를 텍스트파일로 전환하여 저장한다 * JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcdumpwallet", "method": "dumpwallet", "configs": ["/home/username/dump.txt"] }' -H 'content-type:text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": null,
            "error": null,
            "id": "rpcdumpwallet"
        }

명령어: importwallet

  • 파라미터: filename
  • 설명: 지갑 텍스트파일을 도입한다. 이 명령어는 dumpwallet로 도출한 파일만 도입할 수 있다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcimportwallet", "method": "importwallet", "configs": ["/home/username/dump.txt"] }' -H 'content-type:text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": null,
            "error": null,
            "id": "rpcimportwallet"
        }

명령어: encryptwallet

  • 파라미터: password
  • 설명: 최초 노드를 암호화시키는 지갑이고 password를 잠김해제용 암호로 활용한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcencryptwallet", "method": "encryptwallet", "configs": ["password"] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

    {
        "result": "wallet encrypted; server stopping, restart to run with encrypted wallet. The keypool has been flushed, you need to make a new backup.",
        "error": null,
        "id": "rpcencryptwallet"
    }

명령어: changepass

  • 파라미터: 1) old - password 2) new - password
  • 설명: 지갑암호를 변경한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcchangepass", "method": "changepass", "configs": ["password","newpassword"] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": null,
            "error": null,
            "id": "rpcchangepass"
        }

명령어: walletpass

  • 파라미터: 1) password 2) time
  • 설명: password로 잠겨있던 노드를 해제시키는 지갑이고 time 시간 내에 유효하다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcwalletpass", "method": "walletpass", "configs": ["newpassword",3600] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": null,
            "error": null,
            "id": "rpcwalletpass"
        }

명령어: showassets

  • 파라미터: 1) 옵션자산, 디폴트 = * 2) 옵션: false | true, 디폴트 = true 3) 옵션: 수량 4) 옵션: 초기 수량
  • 설명: 체인 내 이미 발행한 자산의 정보를 피드백한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowassets", "method": "showassets", "configs": [] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": [],
            "error": null,
            "id": "rpcshowassets"
        }

명령어: showaddrbals

  • 파라미터: 1) address 2) 옵션: 최소 확인3) 옵션: false | true
  • 설명: 이 계좌노드 지갑중의 모든 자산 잔액 리스트를 피드백한다 1) 계좌 2) 최소의 확인된 수량 3) 잠김을 포함하지 않음
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowaddrbals", "method": "showaddrbals", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N"] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": [{
                "assetref": "",
                "qty": 10652.74,
                "raw": 1065274
            }],
            "error": null,
            "id": "rpcshowaddrbals"
        }

명령어: showallbals

  • 파라미터: 1) 옵션addresses, 디폴트 = * 2) 옵션assets, 디폴트 = * 3) 옵션최소의 확인, 디폴트 = 14) 옵션: false | true, 디폴트 = false 5) 옵션: false | true, 디폴트 = false
  • 설명: addresses에서 지정한 이 노드지갑중의 잔액리스트(원생화폐를 포함한다)를 피드백한다( 1) 주소( 2) 자산( 3) 최소의 확인( 4) 읽기전용계좌를 포함하지 않음( 5) 잠김을 포함하지 않음
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowallbals", "method": "showallbals", "configs": [] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": {
                "18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N": [{
                    "assetref": "",
                    "qty": 10662.74,
                    "raw": 1066274
                }],
                "total": [{
                    "assetref": "",
                    "qty": 10662.74,
                    "raw": 1066274
                }]
            },
            "error": null,
            "id": "rpcshowallbals"
        }

명령어: showaddrdeal

  • 파라미터: 1) address 2) txid
  • 설명: address txid 관련 거래의 정보를 출력한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowaddrdeal", "method": "showaddrdeal", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N", "ca92c5d8f3c39f00ffeb8e64b2ace39a9bf81ff51cdcd56c3445d55f3e698601"] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": {
                "balance": {
                    "amount": -18.03,
                    "assets": []
                },
                "myaddresses": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N"],
                "addresses": ["1RK2Xo56Xn6DJznefCy3x4zKbQYQauHZzA8YAz"],
                "permissions": [],
                "items": [],
                "data": [],
                "confirmations": 1,
                "blockhash": "00c85b0a065be280b05db048094a60f2e02f1f9ec0022736648d8f85682554ef",
                "blockindex": 1,
                "blocktime": 1533534890,
                "txid": "ca92c5d8f3c39f00ffeb8e64b2ace39a9bf81ff51cdcd56c3445d55f3e698601",
                "valid": true,
                "time": 1533534863,
                "timereceived": 1533534863,
                "vin": [{
                    "txid": "0eacf0bfb6afcf5d28c85bf923a330e878545605e2fd2924ed939da49370b254",
                    "vout": 0,
                    "addresses": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 10
                }, {
                    "txid": "f08f7f91b8f362c87c12c878434edd12d77623b647ed966555286a6cdfc7ae43",
                    "vout": 0,
                    "addresses": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 10
                }],
                "vout": [{
                    "n": 0,
                    "addresses": ["1RK2Xo56Xn6DJznefCy3x4zKbQYQauHZzA8YAz"],
                    "type": "pubkeyhash",
                    "ismine": false,
                    "iswatchonly": false,
                    "amount": 18
                }, {
                    "n": 1,
                    "addresses": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 1.97
                }],
                "hex": "010000000254b27093a49d93ed2429fde205565478e830a323f95bc8285dcfafb6bff0ac0e000000006a47304402207865aee2f15beeaa77aae3d63bcfa4e7c00701ba24b8f9260061be878b8317f80220669d42a40865ff764dc194c82b43a5627594d977aa11c109d899e6d7c2ab0272012102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859fffffffff43aec7df6c6a28556596ed47b62376d712dd4e4378c8127cc862f3b8917f8ff0000000006b4830450221008bb77d97a1009659b4fe543d76fdc3d30468ba333c4ab7129a1f658ccbfb9bbd02201028863f6bb5e8ad67eeceb3e80c92414b6a2f9dcb1c4d1b872840f1cd11a867012102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859fffffffff0208070000000000001976a914b3dfb19e2f5ed073f5b4f615b44a6df763ae571388acc5000000000000001976a91434fc71bb74878181225231f0a1597eabe060321588ac00000000"
            },
            "error": null,
            "id": "rpcshowaddrdeal"
        }

명령어: showaddrdeals

  • 파라미터: 1) "address" 2) 옵션: 수량, 디폴트 = 10 3) 옵션: 배제, 디폴트 = 0 4) 옵션: false | true, 디폴트 = false
  • 설명: 이 계좌주소의 거래정보를 피드백한다( 1) 주소( 2) 거래수량 피드백( 3) 배제( 4) true 상세한 정보
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowaddrdeals", "method": "showaddrdeals", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N", 1, 10] }' - H 'content-type: text/plain;'http: //127.0.0.1:5112

귀환:

        {
            "result": [{
                "balance": {
                    "amount": 10,
                    "assets": []
                },
                "myaddresses": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N"],
                "addresses": [],
                "permissions": [],
                "items": [],
                "data": ["53504b62473045022100e4a8f157022c64801b92a966717f393831688de5d306fd3f3759245d23553be802205f6c9a843efa0b67a419c8742762659ec6eb50f0d8db0c34f52dad13c2395152022102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859f"],
                "confirmations": -1,
                "generated": true,
                "txid": "51e71d2f8ee280208ce18a1590fcc1a71f496dfa3135ec4d39a62a1a6e80467a",
                "valid": false,
                "time": 1533534532,
                "timereceived": 1533534532
            }],
            "error": null,
            "id": "rpcshowaddrdeals"
        }

명령어: showwalletdeal

  • 파라미터: 1) TXID 2) 옵션: false | true 3) 옵션false | true
  • 설명: 관련 txid 노드지갑중의 거래정보를 제공한다( 1) TXID( 2) 디폴트false읽기전용계좌주소를 포함하지 않음( 3) 디폴트false상세한 정보를 포함하지 않음
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowwalletdeal", "method": "showwalletdeal", "configs": ["ca92c5d8f3c39f00ffeb8e64b2ace39a9bf81ff51cdcd56c3445d55f3e698601"] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": {
                "balance": {
                    "amount": -18.03,
                    "assets": []
                },
                "myaddresses": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N"],
                "addresses": ["1RK2Xo56Xn6DJznefCy3x4zKbQYQauHZzA8YAz"],
                "permissions": [],
                "items": [],
                "data": [],
                "confirmations": 10,
                "blockhash": "00c85b0a065be280b05db048094a60f2e02f1f9ec0022736648d8f85682554ef",
                "blockindex": 1,
                "blocktime": 1533534890,
                "txid": "ca92c5d8f3c39f00ffeb8e64b2ace39a9bf81ff51cdcd56c3445d55f3e698601",
                "valid": true,
                "time": 1533534863,
                "timereceived": 1533534863
            },
            "error": null,
            "id": "rpcshowwalletdeal"
        }

명령어: showwalletdeals

  • 파라미터: 1) 옵션: 수량, 디폴트 = 10 2) 옵션배제, 디폴트 = 0 3) 옵션: false | true, 디폴트 = false
  • 설명: 관련 count 노드지갑중의 최근 사무정보를 게시한다。( 1) 수량( 2) 배제( 3) false읽기전용계좌주소를 포함하지 않음
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rcpshowwalletdeals", "method": "showwalletdeals", "configs": [1, 10] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": [{
                "balance": {
                    "amount": 10,
                    "assets": []
                },
                "myaddresses": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N"],
                "addresses": [],
                "permissions": [],
                "items": [],
                "data": ["53504b62473045022100d93f08c782cdac61adc22e4e00ea449039fcffb59d861e1aafe9f1d10cd8336602203cb9df84d9bfa0a70861c737fbc95ae1563bded2818125dac538ed869be5e24a022102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859f"],
                "confirmations": 48,
                "generated": true,
                "blockhash": "008206d657bad6bc567d35a98b71b379bdbf51626233595f92a6e563574ac261",
                "blockindex": 0,
                "blocktime": 1533537579,
                "txid": "13b87ebcfe7f5727aa25ca605f0a3b0714b0e3c93d29fb6f4ecfc4a8ad888c63",
                "valid": true,
                "time": 1533537579,
                "timereceived": 1533537579,
                "vin": [{
                    "n": -1,
                    "addresses": [],
                    "type": "nonstandard",
                    "ismine": false,
                    "iswatchonly": false,
                    "amount": -0.01
                }],
                "vout": [{
                    "n": 0,
                    "addresses": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 10
                }, {
                    "n": 1,
                    "addresses": [],
                    "type": "nulldata",
                    "ismine": false,
                    "iswatchonly": false,
                    "amount": 0,
                    "data": ["53504b62473045022100d93f08c782cdac61adc22e4e00ea449039fcffb59d861e1aafe9f1d10cd8336602203cb9df84d9bfa0a70861c737fbc95ae1563bded2818125dac538ed869be5e24a022102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859f"]
                }],
                "hex": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0c02f8000101062f503253482fffffffff02e8030000000000001976a91434fc71bb74878181225231f0a1597eabe060321588ac0000000000000000726a4c6f53504b62473045022100d93f08c782cdac61adc22e4e00ea449039fcffb59d861e1aafe9f1d10cd8336602203cb9df84d9bfa0a70861c737fbc95ae1563bded2818125dac538ed869be5e24a022102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859f00000000"
            }],
            "error": null,
            "id": "rpcshowwalletdeals"
        }    

명령어: showassetdeal

  • 파라미터: 1) assetid 2) txid 3) boolean
  • 설명: 자산id와 txid에 의해 거래내역을 조회한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowassetdeal", "method": "showassetdeal", "configs": ["ETH","ffefff12c966d3c70036d5e28618116cbb39822bddc95e20157a431ec93eb319",true] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": {
                "addresses": {
                    "1Hu44T3agUHecCFHKfArrP1G5QjNYgKcPu": 0
                },
                "items": [],
                "data": [],
                "confirmations": 22,
                "blockhash": "00796883cb4826d3c6628151ee7fa93559c1dee6d5a5de7de9dcd15dca3d0714",
                "blockindex": 1,
                "blocktime": 1537963069,
                "txid": "196367a784f55cab104d9bb74ecbb318c142296917d1af0075dd516fff4e0a77",
                "valid": true,
                "time": 1537963043,
                "timereceived": 1537963043,
                "vin": [{
                    "txid": "349fe0193a0dfaaf6d0b49f421d496b4a63d442b02f89a6a25438d38eb221ee2",
                    "vout": 2,
                    "addresses": ["1Hu44T3agUHecCFHKfArrP1G5QjNYgKcPu"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 0,
                    "assets": [{
                        "name": "JPY",
                        "assetref": "226-300-62639",
                        "qty": 1000
                    }]
                }, {
                    "txid": "58d6bd818a16ad1cecdab5c73806c23710b023ea404c2cccfa741b1fdeecbe8e",
                    "vout": 1,
                    "addresses": ["1Hu44T3agUHecCFHKfArrP1G5QjNYgKcPu"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 1000003682.02
                }],
                "vout": [{
                    "n": 0,
                    "addresses": ["12CwFvogMGrC98eA1gCGTw89bG2CPmN1Tw"],
                    "type": "pubkeyhash",
                    "ismine": false,
                    "iswatchonly": true,
                    "amount": 2000,
                    "permissions": [{
                        "for": null,
                        "connect": false,
                        "send": true,
                        "receive": false,
                        "create": false,
                        "sell": false,
                        "mine": false,
                        "root": false,
                        "admin": false,
                        "startblock": 0,
                        "endblock": 4294967295,
                        "timestamp": 1537963043
                    }]
                }, {
                    "n": 1,
                    "addresses": ["1Hu44T3agUHecCFHKfArrP1G5QjNYgKcPu"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 0,
                    "assets": [{
                        "name": "JPY",
                        "assetref": "226-300-62639",
                        "qty": 1000,
                        "type": "transfer"
                    }]
                }, {
                    "n": 2,
                    "addresses": ["1Hu44T3agUHecCFHKfArrP1G5QjNYgKcPu"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 1000001681.56
                }],
                "hex": "0100000002e21e22eb388d43256a9af8022b443da6b496d421f4490b6daffa0d3a19e09f34020000006b4830450221009ed45c13712e613836a34af0a41a60c403cacf2ca1cb617370457472f1d8acda022034e34d3cdddae696d791e27ab1f8899de09fcbe634c02e40db72666bbdc6421b012102bf77975f581ac99b1e22dce58f2b5f05beb3b8d3ad52be687ad56b41a6745c72ffffffff8ebeecde1f1b74facc2c4c40ea23b01037c20638c7b5daec1cad168a81bdd658010000006a47304402207461060c5dc63135b18ff3ec83d7708fbc9de97304f47682dbcdec32dbb54b0f0220275d2016754898eaf0e26ef500c148fba8eda74c09c3d69e1e2e8a2c2df7ac7c012102bf77975f581ac99b1e22dce58f2b5f05beb3b8d3ad52be687ad56b41a6745c72ffffffff03400d0300000000002f76a9140d39fe3e4bd85f02e8d56087574d68035289030788ac1473706b700200000000000000ffffffff2374ab5b7500000000000000003776a914b95a324bae5f6bf551766f61e82cb172b13161f288ac1c73706b7150d303023230534d81b64cda5061f4afa08601000000000075dc787948170000001976a914b95a324bae5f6bf551766f61e82cb172b13161f288ac00000000"
            },
            "error": null,
            "id": "rpcshowassetdeal"
        }

명령어: showassetdeals

  • 파라미터: 1) assetid 2) count 3) start 4) Boolean true지갑데이터순서에 기준하여 정렬한다, false체인순서에 기준하여 정렬한다
  • 설명: 특정자산의 거래정보를 조회한다. 노드에서 자산을 미리 오더하여야 한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowassetdeals", "method": "showassetdeals", "configs": ["JPY","196367a784f55cab104d9bb74ecbb318c142296917d1af0075dd516fff4e0a77",true] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": [{
                "addresses": {
                    "1Hu44T3agUHecCFHKfArrP1G5QjNYgKcPu": 0
                },
                "items": [],
                "data": [],
                "confirmations": 22,
                "blockhash": "00796883cb4826d3c6628151ee7fa93559c1dee6d5a5de7de9dcd15dca3d0714",
                "blockindex": 1,
                "blocktime": 1537963069,
                "txid": "196367a784f55cab104d9bb74ecbb318c142296917d1af0075dd516fff4e0a77",
                "valid": true,
                "time": 1537963043,
                "timereceived": 1537963043,
                "vin": [{
                    "txid": "349fe0193a0dfaaf6d0b49f421d496b4a63d442b02f89a6a25438d38eb221ee2",
                    "vout": 2,
                    "addresses": ["1Hu44T3agUHecCFHKfArrP1G5QjNYgKcPu"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 0,
                    "assets": [{
                        "name": "JPY",
                        "assetref": "226-300-62639",
                        "qty": 1000
                    }]
                }, {
                    "txid": "58d6bd818a16ad1cecdab5c73806c23710b023ea404c2cccfa741b1fdeecbe8e",
                    "vout": 1,
                    "addresses": ["1Hu44T3agUHecCFHKfArrP1G5QjNYgKcPu"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 1000003682.02
                }],
                "vout": [{
                    "n": 0,
                    "addresses": ["12CwFvogMGrC98eA1gCGTw89bG2CPmN1Tw"],
                    "type": "pubkeyhash",
                    "ismine": false,
                    "iswatchonly": true,
                    "amount": 2000,
                    "permissions": [{
                        "for": null,
                        "connect": false,
                        "send": true,
                        "receive": false,
                        "create": false,
                        "sell": false,
                        "mine": false,
                        "root": false,
                        "admin": false,
                        "startblock": 0,
                        "endblock": 4294967295,
                        "timestamp": 1537963043
                    }]
                }, {
                    "n": 1,
                    "addresses": ["1Hu44T3agUHecCFHKfArrP1G5QjNYgKcPu"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 0,
                    "assets": [{
                        "name": "JPY",
                        "assetref": "226-300-62639",
                        "qty": 1000,
                        "type": "transfer"
                    }]
                }, {
                    "n": 2,
                    "addresses": ["1Hu44T3agUHecCFHKfArrP1G5QjNYgKcPu"],
                    "type": "pubkeyhash",
                    "ismine": true,
                    "iswatchonly": false,
                    "amount": 1000001681.56
                }],
                "hex": "0100000002e21e22eb388d43256a9af8022b443da6b496d421f4490b6daffa0d3a19e09f34020000006b4830450221009ed45c13712e613836a34af0a41a60c403cacf2ca1cb617370457472f1d8acda022034e34d3cdddae696d791e27ab1f8899de09fcbe634c02e40db72666bbdc6421b012102bf77975f581ac99b1e22dce58f2b5f05beb3b8d3ad52be687ad56b41a6745c72ffffffff8ebeecde1f1b74facc2c4c40ea23b01037c20638c7b5daec1cad168a81bdd658010000006a47304402207461060c5dc63135b18ff3ec83d7708fbc9de97304f47682dbcdec32dbb54b0f0220275d2016754898eaf0e26ef500c148fba8eda74c09c3d69e1e2e8a2c2df7ac7c012102bf77975f581ac99b1e22dce58f2b5f05beb3b8d3ad52be687ad56b41a6745c72ffffffff03400d0300000000002f76a9140d39fe3e4bd85f02e8d56087574d68035289030788ac1473706b700200000000000000ffffffff2374ab5b7500000000000000003776a914b95a324bae5f6bf551766f61e82cb172b13161f288ac1c73706b7150d303023230534d81b64cda5061f4afa08601000000000075dc787948170000001976a914b95a324bae5f6bf551766f61e82cb172b13161f288ac00000000"
            }],
            "error": null,
            "id": "rpcshowassetdeals"
        }

명령어: send

  • 파라미터: 1) address 2) 수량 3) 옵션: 수량 4) 옵션: 추가 정보의 귀속
  • 설명: 1개나 여러 개 자산(원생자산도 가능)를 address에 발송하여 TXID를 피드백한다 1) 주소 2) {"asset": qty,...},자산명칭, 매개 대상의 qty가 발송한 자산의 수량임 3) 수량 4) 추가 정보의 귀속
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsend", "method": "send", "configs": ["164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m",{"TOC":1000,"":2000}] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": "e395151d1db6e5629d8e4903559f0809746c7b350f0017e8cfc6f60b18a846f7",
            "error": null,
            "id": "rpcsend"
        }
명령어: sendfrom
  • 파라미터: 1) from - address 2) to - address 3) 수량 4) 옵션: 수량 5) 옵션: 추가 정보의 귀속
  • 설명: send와 동일하고 from - address를 통해 다룬다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsendfrom", "method": "sendfrom", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N","164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m",1] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": "1b27777e582c3f8ab0d912bb07d02fee6c8fe91160ff0183a1abc6e2219da209",
            "error": null,
            "id": "rpcsendfrom"
        }

명령어: sendasset

  • 파라미터: 1) address 2) 자산명칭 3) 수량 4) 옵션: 광부수수료 5) 옵션: 수량 6) 옵션: 추가 정보의 귀속
  • 설명: 일정한 수량의 자산을 지정된 주소에 발송하여 TXID를 피드백한다
  • JSON RPC参考:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsendasset", "method": "sendasset", "configs": ["164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m", "TOC", 1000] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": "87988ebb4ba152d9eacd595acfe934b2104e1cefdbddb7895cf43df905927270",
            "error": null,
            "id": "rpcsendasset"
        }

명령어: sendassetfrom

  • 파라미터: 1) from - address 2) to - address 3) 자산명칭 4) 수량5) 옵션: 광부수수료6) 옵션: 수량7) 옵션: 추가 정보의 귀속
  • 설명: sendasset와 유사하고 from - address를 통해 다룬다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsendassetfrom", "method": "sendassetfrom", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N","164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m", "TOC",1] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": "5e9c6d1be2807c0bdcc990e1d5df5dbe63d154ac5b95dd4c3a857364f5521eca",
            "error": null,
            "id": "rpcsendassetfrom"
        }

명령어: senddata

  • 파라미터: 1) address 2) 원생화폐 수량 | 대상자 3) 16진법 데이터 | 대상자
  • 설명: send와 유사하고 데이터사무를 추가한다 1) 주소 2) 원생화폐 수량 | {"asset-id": qty}3) data - hex | {"for": datamod,"key": "...","data": "..."}
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsenddata", "method": "senddata", "configs": ["164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m", 0.1, "5e9c6d1be2807c0bdcc990e1d5df5dbe63d154ac5b95dd4c3a857364f5521eca"] }' - H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": "a6fc00cd7e0ebb23cba98e3a5568a4dc1048abc087b5079ca55fbd45bdae710f",
            "error": null,
            "id": "rpcsenddata"
        }

명령어: senddatafrom

  • 파라미터: 1) from - address 2) to - address 3) 원생화폐 수량 | 대상자 4) 16진법 데이터 | 대상자
  • 설명: senddata와 유사하고 from - address를 통해 다룬다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsenddatafrom", "method": "senddatafrom", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N","164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m", 0.1, "a6fc00cd7e0ebb23cba98e3a5568a4dc1048abc087b5079ca55fbd45bdae710f"] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": "21576deaa1e52544670ee826eba60ec16a98e85e10c80d0bd32fc2b44e2aec72",
            "error": null,
            "id": "rpcsenddatafrom"
        }

명령어: validaddr

  • 파라미터: 1) address 1) pubkey 1) privatekey
  • 설명: 주소가 정확한지여부를 검증하여 교정한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcvalidaddr", "method": "validaddr", "configs": ["11HGiMrQocKZAdSuPgJoMAckLV9bDQR7S"] }' -H 'content-type: text/plain;'http://127.0.0.1:5112

귀환:

        {
            "result": {
                "isvalid": true,
                "address": "11HGiMrQocKZAdSuPgJoMAckLV9bDQR7S",
                "ismine": true,
                "iswatchonly": false,
                "isscript": false,
                "pubkey": "028a112726406c5b7a3bbe3cdf5c0c65b1900dc9550a3452d3b2036b63e7d490de",
                "iscompressed": true,
                "synchronized": true
            },
            "error": null,
            "id": "rpcvalicaddr"
        }

디지털자산/데이터모쥴을 발행하는 명령어를 창설하기

명령어: sell

  • 파라미터:1)address 2)명칭|자산배치 3)수량 4)선택 가능한 최소단위:디폴트=1 5)옵션:디폴트 수수료=최저 6)옵션:자체 정의 정보
  • 설명:주소에 일정한 수량의 자산을 발행한다。1)address에 발행2)명칭 혹은 대상자{"name":"asset1","open":true},true는 추가발행이 가능하다는 뜻 3)수량 4)거래 가능한 최소단위, 예를 들어 0.1 5)수수료 6)자체 정의 정보
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsell", "method": "sell", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N ", {"name":"AOC","open":true}, 500, 0.01, 0.01] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result": "db51c2c5192d4f6b5dd14fb400ee212b9e9b1d9a42ce1410c546ac225256dedc",
            "error": null,
            "id": "rpcsell"
        }

명령어: sellfrom

  • 파라미터:1)from-address 2)to-address 3)명칭|자산배치 4)수량 5)선택 가능한 최소단위:디폴트=1 6)옵션:디폴트 수수료=최저 7)옵션:자체 정의 정보
  • 설명:sell와 동일하고 특정주소from-address를 통해 다룬다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsellfrom", "method": "sellfrom", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N","164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m", "ZOC" , 1000, 0.01, 0.01] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"682da8869ec5e8f73c9047468bfb78f753e73bc8fd667d475287910f0395ada5",
            "error":null,
            "id":"rpcsellfrom"
        }

명령어: sellasset

  • 파라미터:1)address 2)기존자산3)추가수량4)옵션:디폴트 수수료=최저 5)옵션:자체 정의 정보
  • 설명:지정된 주소에 일정한 수량의 자산을 추가 발행한다。(1)주소(2)기존자산(3)추가수량(4)수수료(5)자체 정의 정보
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsellasset", "method": "sellasset", "configs": ["164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m", "AOC", 1000, 0.01] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"e4bd2c85216a4fedcf1f0e83e6211c6b50b0bf6b18cd925c93d6e11f3bf22934",
            "error":null,
            "id":"rpcsellasset"
        }

명령어: sellassetfrom

  • 파라미터:1)from-address 2)to-addressasset 3)기존자산 4)추가수량 5)옵션:디폴트 수수료=최저 6)옵션:자체 정의 정보
  • 설명:sellasset와 동일하고 특정주소from-address를 통해 다룬다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsellassetfrom", "method": "sellassetfrom", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N","164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m", "AOC", 1000, 0.01] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"ee0da0ba6ec9268953d2c9cea549a9b27c8909b6a5e9677235825bafc8c75966",
            "error":null,
            "id":"rpcsellassetfrom"
        }

명령어: setupdatamod

  • 파라미터: 1)명칭 2)true|false 3)옵션:자체 정의 정보
  • 설명:데이터모쥴을 창설한다(1)명칭(2)true인 경우 임의의 자가 데이터모쥴에 모두 발포할 수 있고 false인 경우 창설자만 발포할 수 있다(3)옵션:자체 정의 정보
  • JSON RPC 실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsetupdatamod", "method": "setupdatamod", "configs": ["DM01", true] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"3fd02780979dc668d4b80a851178c751a8537309a42920b65daae4781033c380",
            "error":null,
            "id":"rpcsetupdatamod"
        }

명령어: setupdatamodfrom

  • 파라미터: 1)from-address 2)명칭 3)true|false 4)옵션:자체 정의 정보
  • 설명:setupdatamod와 동일하고 from-address를 통해 다룬다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsetupdatamodfrom", "method": "setupdatamodfrom", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N", "DM02", false] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"81bef0741e932549d14e150f277359ad6732d02420f2c69e03a9f9592a307bb8",
            "error":null,
            "id":"rpcsetupdatamodfrom"
        }

명령어: senditem

  • 파라미터:(1)데이터모쥴의 명칭(2)키워드/키워드 숫자조합 (3)데이터
  • 설명:데이터모쥴에 데이터를 입력한다 1)데이터모쥴의 명칭2)텍스트양식의 키워드나 숫자조합3)16진법 데이터나 JSON대상자 혹은 텍스트
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsenditem", "method": "senditem", "configs": ["DM01", "key01", "81bef0741e932549d14e150f277359ad6732d02420f2c69e03a9f9592a307bb8"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"1818882cff70fa4f0489b1df53811e445bc73a58386ffe55a3a0b9c2e8e179bd",
            "error":null,
            "id":"rpcsenditem"
        }

명령어: senditemfrom

  • 파라미터:1)from-address 2)데이터모쥴의 명칭 3)키워드/키워드 숫자조합 4)데이터
  • 설명:senditem와 동일하고 from-address를 통해 다룬다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsenditemfrom", "method": "senditemfrom", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N", "DM01", "key02", "1818882cff70fa4f0489b1df53811e445bc73a58386ffe55a3a0b9c2e8e179bd "] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":null,
            "error":{
                "code":-15,
                "message":"data should be hexadecimal string or recognized object"
            },
            "id":"rpcsenditemfrom"
        }

명령어: showdatas

  • 파라미터:1)옵션데이터모쥴의 명칭디폴트=* 2)옵션:false|true,디폴트=false 3)옵션:수량,디폴트=수량 4)옵션:초기 값,디폴트=최신
  • 설명:블록체인에 창설한 관련 데이터모쥴의 정보를 피드백한다。1)데이터모쥴의 명칭 2)rue 창설주소로 귀환,디폴트값:false 3)수량 4)초기
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowdatas", "method": "showdatas", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":[
                {
                    "name":"devroot",
                    "setuptxid":"b53791e4f4299a001d04337a9ef041104e5578e7270dc74e25265f1def28c2f3",
                    "datamodref":"0-0-0",
                    "restrict":{
                        "write":false,
                        "inchain":false,
                        "outchain":false
                    },
                    "details":{

                    },
                    "ordered":true,
                    "synchronized":true,
                    "items":0,
                    "confirmed":0,
                    "keys":0,
                    "senditemers":0
                },
                {
                    "name":"DM01",
                    "setuptxid":"3fd02780979dc668d4b80a851178c751a8537309a42920b65daae4781033c380",
                    "datamodref":"357-300-53311",
                    "restrict":{
                        "write":false,
                        "inchain":false,
                        "outchain":false
                    },
                    "details":{

                    },
                    "ordered":false
                },
                {
                    "name":"DM02",
                    "setuptxid":"81bef0741e932549d14e150f277359ad6732d02420f2c69e03a9f9592a307bb8",
                    "datamodref":"360-300-48769",
                    "restrict":{
                        "write":true,
                        "inchain":false,
                        "outchain":false
                    },
                    "details":{

                    },
                    "ordered":false
                }
            ],
            "error":null,
            "id":"rpcshowdatas"
        }

명령어: order

  • 파라미터:1)1개나 여러 개 자산|1개나 여러 개 데이터모쥴2)옵션:true|false,디폴트=true
  • 설명:자산이나 데이터모쥴을 주문하여 노드에서 1개나 여러 개 자산 혹은 데이터모쥴을 추적하라고 요구한다 1)1개나 여러 개 자산|1개나 여러 개 데이터모쥴 2)다시 스캔하겠는지, true는 다시 스캔이라는 뜻
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcorder", "method": "order", "configs": ["DM01", true] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":null,
            "error":null,
            "id":"rpcorder"
        }

명령어: noorder

  • 파라미터:1개나 여러 개 자산|1개나 여러 개 데이터모쥴
  • 설명:자산이나 데이터모쥴 주문을 취소하여 노드에서 1개나 여러 개 자산 혹은 데이터모쥴에 대한 추적을 중지하라고 요구한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcnoorder", "method": "noorder", "configs": ["DM01"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":null,
            "error":null,
            "id":"rpcnoorder"
        }

명령어: showdataitem

  • 파라미터: 1)데이터모쥴의 명칭 2)TXID 3)옵션:false|true,디폴트=false
  • 설명:TXID를 통해 데이터모쥴 목록을 검색한다(1)데이터모쥴의 명칭(2)TXID(3)디폴트false인 경우 데이터를 표시하지 않고 true인 경우 데이터를 표시한다
  • JSON参考实现:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowdataitem", "method": "showdataitem", "configs": ["DM01", "1818882cff70fa4f0489b1df53811e445bc73a58386ffe55a3a0b9c2e8e179bd"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":{
                "senditemers":[
                    "164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m"
                ],
                "keys":[
                    "key01"
                ],
                "outchain":false,
                "available":true,
                "data":"81bef0741e932549d14e150f277359ad6732d02420f2c69e03a9f9592a307bb8",
                "confirmations":18,
                "blocktime":1533542011,
                "txid":"1818882cff70fa4f0489b1df53811e445bc73a58386ffe55a3a0b9c2e8e179bd"
            },
            "error":null,
            "id":"rpcshowdataitem"
        }

명령어: showdataitems

  • 파라미터:1)데이터모쥴의 명칭2)옵션:목록수량,디폴트=10 3)옵션:초기목록 4)옵션:false|true,디폴트=false
  • 설명:datamodID에 해당한 목록을 표시한다 1)데이터모쥴의 명칭(2)목록수(3)어느 목록부터 시작하는지(4)false인 경우 지갑중(우선체인), true인 경우 블록중(좌선체인) 。
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowdataitems", "method": "showdataitems", "configs": ["DM01", 20] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":[
                {
                    "senditemers":[
                        "164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m"
                    ],
                    "keys":[
                        "key01"
                    ],
                    "outchain":false,
                    "available":true,
                    "data":"81bef0741e932549d14e150f277359ad6732d02420f2c69e03a9f9592a307bb8",
                    "confirmations":12,
                    "blockhash":"00ea4dfccb5bd2418140a170679a54de5d7123f75dfdcdbfa4d5d826084380cc",
                    "blockindex":1,
                    "blocktime":1533542011,
                    "txid":"1818882cff70fa4f0489b1df53811e445bc73a58386ffe55a3a0b9c2e8e179bd",
                    "vout":0,
                    "valid":true,
                    "time":1533541989,
                    "timereceived":1533541989
                }
            ],
            "error":null,
            "id":"rpcshowdataitems"
        }

명령어: showdatakeys

  • 파라미터: 1)데이터모쥴의 명칭 2)옵션:키워드|키워드 숫자조합,디폴트=* 3)옵션:수량,디폴트=최대 값 4)옵션:초기수량 5)옵션:false|true,디폴트=true
  • 설명:显示数据模块的키워드信息 1)데이터모쥴의 명칭 2)키워드|키워드 숫자조합 3)목록수 4)어느 목록부터 시작하는지 5)false인 경우 지갑중(우선체인), true인 경우 블록중(좌선체인)
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowdatakeys", "method": "showdatakeys", "configs": ["DM01", "key01"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":[
                {
                    "key":"key01",
                    "items":1,
                    "confirmed":1
                }
            ],
            "error":null,
            "id":"rpcshowdatakeys"
        }

명령어: showdatakeyitems

  • 파라미터: 1)데이터모쥴의 명칭 2)키워드 3)옵션:목록수량 4)옵션:초기목록 5)옵션:false|true,디폴트=false
  • 설명:列出给定的项目关键字的数据条目内容信息 1)데이터모쥴의 명칭 2)키워드 3)목록수 4)어느 목록부터 시작하는지 5)false인 경우 지갑중(우선체인), true인 경우 블록중(좌선체인)
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowdatakeyitems", "method": "showdatakeyitems", "configs": ["DM01", "key01", 20] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":[
                {
                    "senditemers":[
                        "164zASaqJpfBz6bdNrXHX7qbHpmuimyavuQw1m"
                    ],
                    "keys":[
                        "key01"
                    ],
                    "outchain":false,
                    "available":true,
                    "data":"81bef0741e932549d14e150f277359ad6732d02420f2c69e03a9f9592a307bb8",
                    "confirmations":21,
                    "blockhash":"00ea4dfccb5bd2418140a170679a54de5d7123f75dfdcdbfa4d5d826084380cc",
                    "blockindex":1,
                    "blocktime":1533542011,
                    "txid":"1818882cff70fa4f0489b1df53811e445bc73a58386ffe55a3a0b9c2e8e179bd",
                    "vout":0,
                    "valid":true,
                    "time":1533541989,
                    "timereceived":1533541989
                }
            ],
            "error":null,
            "id":"rpcshowdatakeyitems"
        }

명령어: showdatasenderitems

  • 파라미터:1)데이터모쥴의 명칭 2)주소 3)옵션:false|true,디폴트=false 4)옵션:목록수량 5)옵션:초기목록 6)옵션false|true,디폴트=false
  • 설명:발송자주소를 창설하는 데이터목록을 열거한다 1)데이터모쥴의 명칭 2)발송자주소 3)true인 경우 상세정보를 표시함 4)목록수5)어느 목록부터 시작하는지 6)false인 경우 지갑중(우선체인), true인 경우 블록중(좌선체인)
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowdatasenderitems", "method": "showdatasenderitems", "configs": ["DM01", "18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N ", false, 20] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":[

            ],
            "error":null,
            "id":"rpcshowdatasenderitems"
        }

명령어: showdatasenders

  • 파라미터:1)데이터모쥴의 명칭 2)옵션:주소,디폴트=* 3)옵션false|true,디폴트=false 4)옵션:목록수량 5)옵션:초기목록 6)옵션false|true,디폴트=false
  • 설명:데이터 입력자의 정보를 표시한다 1)데이터모쥴의 명칭 2)발송자주소 3)true인 경우 상세정보를 표시함 4)목록수 5)어느 목록부터 시작하는지 6)false인 경우 지갑중(우선체인), true인 경우 블록중(좌선체인)
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowdatasenders", "method": "showdatasenders", "configs": ["DM01"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":[

            ],
            "error":null,
            "id":"rpcshowdatasenderitems"
        }

명령어: showtxoutdata

  • 파라미터:1)txid 2)vout 3)count-bytes 바이트수 조회하기 4)start-byte 데이터 시작위치
  • 설명:지정된 거래의 추가데이터를 조회한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowtxoutdata", "method": "showtxoutdata", "configs": ["9edc978c0f346508ac59b2bc970af2e8a8c6e32d3249dc3f778f7210e6dd91f9",0] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":{
                "json":{
                    "a":333,
                    "c":444
                }
            },
            "error":null,
            "id":"rpcshowtxoutdata"
        }

화폐 교환 및 원자 거래 관리

명령어: prelock

  • 파라미터:1){"자산":수량, ...} 2)옵션:true|false,디폴트=true
  • 설명:사용하지 않는 출력은 원자거래(화폐간 환전)에 소비되어 TXID와 VOUT를 피드백한다 1){"자산":수량, ...} 2)true인 경우 잠그고 flse인 경우 잠그지 않음
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcprelock", "method": "prelock", "configs": [{"TOC":1000}] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":{
                "txid":"a4665f49a59dcf75c591efe17bbea618862fa6fbd55985677dd6c64a39ca03e7",
                "vout":0
            },
            "error":null,
            "id":"rpcprelock"
        }

명령어: prelockfrom

  • 파라미터: 1)from-address 2){"자산":수량, ...} 3)옵션:true|false,디폴트=true
  • 설명:prelockunspent와 동일하고 from-address를 통해 다룬다 1)계좌주소 2){"자산":수량, ...} 3)true인 경우 잠그고 flse인 경우 잠그지 않음
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcprelockfrom", "method": "prelockfrom", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N", {"AOC":100}] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":{
                "txid":"7ee8b7881d5bea3f73fd8b3ed61641ed3ab8ac53be681d9f04c2e46b6049ed1a",
                "vout":0
            },
            "error":null,
            "id":"rpcprelockfrom"
        }

명령어: setuprawex

  • 파라미터:1)TXID 2)VOUT 3){"자산":수량, ...}
  • 설명:prelock조작에 의해 생성된 TXID와 VOUT에 근거하여 새로운 원자교환거래를 창설하여 일정한 수량의 자산을 환전하고 16진법 텍스트블록인 TX-HEX를 피드백하여 상대방이 거래할 수 있도록 한다 1)TXID:prelock (from)의 출력 2)VOUT:위와 같음 3)환전을 요청하는 자산과 수량
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsetuprawex", "method": "setuprawex", "configs": ["7ee8b7881d5bea3f73fd8b3ed61641ed3ab8ac53be681d9f04c2e46b6049ed1a",0,{"TOC":100}] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"01000000011aed49606be4c2049f1d68be53acb83aed4116d63e8bfd733fea5b1d88b7e87e000000006b483045022100a497be462b4ad8b215250cf261d71ed7806b6d4b3cd7b84c61f63480fa2acd45022004e0c96cd3a283d6e6ad75305423a9863defc865e220a3aa06a5996fd4c02b99832102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859fffffffff0100000000000000003776a91434fc71bb74878181225231f0a1597eabe060321588ac1c73706b71a1560f93508207ffdb6637567a47384b10270000000000007500000000",
            "error":null,
            "id":"rpcsetuprawex"
        }

명령어: decoderawex

  • 파라미터:1)TX-HEX 2)옵션:false|true,디폴트=false
  • 설명:setuprawex로 창설된 tx-hex를 암호해독한다。
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcdecoderawex", "method": "decoderawex", "configs": ["01000000011aed49606be4c2049f1d68be53acb83aed4116d63e8bfd733fea5b1d88b7e87e000000006b483045022100a497be462b4ad8b215250cf261d71ed7806b6d4b3cd7b84c61f63480fa2acd45022004e0c96cd3a283d6e6ad75305423a9863defc865e220a3aa06a5996fd4c02b99832102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859fffffffff0100000000000000003776a91434fc71bb74878181225231f0a1597eabe060321588ac1c73706b71a1560f93508207ffdb6637567a47384b10270000000000007500000000"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":{
                "offer":{
                    "amount":0,
                    "assets":[
                        {
                            "name":"AOC",
                            "assetref":"348-301-20955",
                            "qty":100
                        }
                    ]
                },
                "ask":{
                    "amount":0,
                    "assets":[
                        {
                            "name":"TOC",
                            "assetref":"300-300-14411",
                            "qty":100
                        }
                    ]
                },
                "requiredfee":0.05,
                "candisable":true,
                "cancomplete":true,
                "complete":false
            },
            "error":null,
            "id":"rpcdecoderawex"
        }

명령어: addrawex

  • 파라미터: 1)TX-HEX 2)TXID 3)VOUT 4){"자산":수량, ...}
  • 설명:전부/일부 견적을 받아 화폐간 환전을 진행한다1)TX-HEX 발기자측setuprawex의 출력 2)TXID자기측prelock(from)의 출력3)VOUT위와 같음4)수령한 자산 및 수량
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:ESPFybZXGhEyECgvjqDLo5CjaYmqKYUyEngwBaYqugfn --data-binary '{"jsonrpc": "2.0", "id":"rpcaddrawex", "method": "addrawex", "configs":["01000000011aed49606be4c2049f1d68be53acb83aed4116d63e8bfd733fea5b1d88b7e87e000000006b483045022100a497be462b4ad8b215250cf261d71ed7806b6d4b3cd7b84c61f63480fa2acd45022004e0c96cd3a283d6e6ad75305423a9863defc865e220a3aa06a5996fd4c02b99832102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859fffffffff0100000000000000003776a91434fc71bb74878181225231f0a1597eabe060321588ac1c73706b71a1560f93508207ffdb6637567a47384b10270000000000007500000000","05745c2b16cee20c40b699e95dedd97253bcb816de7f01ec8bf0a53c5cf5f5c9",0,{"AOC":100}] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":{
                "hex":"01000000021aed49606be4c2049f1d68be53acb83aed4116d63e8bfd733fea5b1d88b7e87e000000006b483045022100a497be462b4ad8b215250cf261d71ed7806b6d4b3cd7b84c61f63480fa2acd45022004e0c96cd3a283d6e6ad75305423a9863defc865e220a3aa06a5996fd4c02b99832102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859fffffffffc9f5f55c3ca5f08bec017fde16b8bc5372d9ed5de999b6400ce2ce162b5c7405000000006b483045022100fe71f97d2f98d9c0d07f3163da0d5e21cdb6db89ea9ae4b4c49e530619007019022036f00b53e56ac5e2935c58a74c7bd94bc04777f4687e2722b9097286611aa64a83210298102aab3caf958614ee7f83b04771b507cf2335be6f3fc8daf1da108cef6b07ffffffff0200000000000000003776a91434fc71bb74878181225231f0a1597eabe060321588ac1c73706b71a1560f93508207ffdb6637567a47384b10270000000000007500000000000000003776a914b3dfb19e2f5ed073f5b4f615b44a6df763ae571388ac1c73706b712b21ee00b44fd15d6b4f2d19c5c251db10270000000000007500000000",
                "complete":true
            },
            "error":null,
            "id":"rpcaddrawex"
        }

명령어: completerawex

  • 파라미터:1)TX-HEX 2)TXID 3)VOUT 4){"자산":수량, ...} 5)옵션:16진법 데이터|대상자
  • 설명:addrawex와 유사하나 최종적으로 교환을 확정한다。1)TX-HEX지난 주소교환의 출력2)자기측prelock(from)의 출력3)vout 위와 같음4)수령한 자산 및 수량 5)초기데이터인 data-hex 16진법 문자열 혹은 대상자를 포함함
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:ESPFybZXGhEyECgvjqDLo5CjaYmqKYUyEngwBaYqugfn --data-binary '{"jsonrpc": "2.0", "id":"rpccompleterawex", "method": "completerawex", "configs": ["01000000011aed49606be4c2049f1d68be53acb83aed4116d63e8bfd733fea5b1d88b7e87e000000006b483045022100a497be462b4ad8b215250cf261d71ed7806b6d4b3cd7b84c61f63480fa2acd45022004e0c96cd3a283d6e6ad75305423a9863defc865e220a3aa06a5996fd4c02b99832102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859fffffffff0100000000000000003776a91434fc71bb74878181225231f0a1597eabe060321588ac1c73706b71a1560f93508207ffdb6637567a47384b10270000000000007500000000","05745c2b16cee20c40b699e95dedd97253bcb816de7f01ec8bf0a53c5cf5f5c9",0,{"AOC":100}] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"01000000021aed49606be4c2049f1d68be53acb83aed4116d63e8bfd733fea5b1d88b7e87e000000006b483045022100a497be462b4ad8b215250cf261d71ed7806b6d4b3cd7b84c61f63480fa2acd45022004e0c96cd3a283d6e6ad75305423a9863defc865e220a3aa06a5996fd4c02b99832102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859fffffffffc9f5f55c3ca5f08bec017fde16b8bc5372d9ed5de999b6400ce2ce162b5c7405000000006b483045022100cb071dae75a2e9d5096b85fe345fcf88e71edbd53cc520f1a8911f72abd2705f022029f51524992af3a95da81b220092bc0fee2d2c789a69dffc73adba879a71779101210298102aab3caf958614ee7f83b04771b507cf2335be6f3fc8daf1da108cef6b07ffffffff0200000000000000003776a91434fc71bb74878181225231f0a1597eabe060321588ac1c73706b71a1560f93508207ffdb6637567a47384b10270000000000007500000000000000003776a914b3dfb19e2f5ed073f5b4f615b44a6df763ae571388ac1c73706b712b21ee00b44fd15d6b4f2d19c5c251db10270000000000007500000000",
            "error":null,
            "id":"rpccompleterawex"
        }

명령어: sendrawdeal

  • 파라미터:TX-HEX
  • 설명:원자거래(화폐간 환전)인 TX-HEX를 검증하여 네트워크에 발송하고 TXID를 피드백한다。TX-HEX complete:true출력한 텍스트블록
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:ESPFybZXGhEyECgvjqDLo5CjaYmqKYUyEngwBaYqugfn --data-binary '{"jsonrpc": "2.0", "id":"rpcsendrawdeal", "method": "sendrawdeal", "configs": ["01000000021aed49606be4c2049f1d68be53acb83aed4116d63e8bfd733fea5b1d88b7e87e000000006b483045022100a497be462b4ad8b215250cf261d71ed7806b6d4b3cd7b84c61f63480fa2acd45022004e0c96cd3a283d6e6ad75305423a9863defc865e220a3aa06a5996fd4c02b99832102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859fffffffffc9f5f55c3ca5f08bec017fde16b8bc5372d9ed5de999b6400ce2ce162b5c7405000000006b483045022100cb071dae75a2e9d5096b85fe345fcf88e71edbd53cc520f1a8911f72abd2705f022029f51524992af3a95da81b220092bc0fee2d2c789a69dffc73adba879a71779101210298102aab3caf958614ee7f83b04771b507cf2335be6f3fc8daf1da108cef6b07ffffffff0200000000000000003776a91434fc71bb74878181225231f0a1597eabe060321588ac1c73706b71a1560f93508207ffdb6637567a47384b10270000000000007500000000000000003776a914b3dfb19e2f5ed073f5b4f615b44a6df763ae571388ac1c73706b712b21ee00b44fd15d6b4f2d19c5c251db10270000000000007500000000"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"6de570c18305d9f52088935354c125d3b740d26f7856131dd91daf4affdc1b3f",
            "error":null,
            "id":"rpcsendrawdeal"
        }

명령어: disrawdeal

  • 파라미터:TX-HEX
  • 설명:교환을 금지하는 오퍼인 TX-HEX이고 TXID를 피드백한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcdisrawdeal", "method": "disrawdeal", "configs": ["0100000001e703ca394ac6d67d678559d5fba62f8618a6be7be1ef91c575cf9da5495f66a4000000006a4730440220435b702f1a5adebc24e9f1f70282cb59e0819ce154cb2d22c3d97964447f7372022058673ff0b984f3c0d0524b71212a5862be7b0375cf3134793216c997baf94e17832102998a9ba30ed924d8c36cbc70d78ddbd466ba9b23211914d0a239a525e05a859fffffffff0100000000000000003776a91434fc71bb74878181225231f0a1597eabe060321588ac1c73706b712b21ee00b44fd15d6b4f2d19c5c251db10270000000000007500000000"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"f81a4df584d8b91b3418c29fe272097817454763b1b6f3cda4e0d75c215f436e",
            "error":null,
            "id":"rpcdisrawdeal"
        }

명령어: gatherunspent

  • 파라미터:1)옵션:地址,디폴트=* 2)옵션:최소 확인,디폴트=1 3)옵션:최대 집계수량,디폴트=100 4)옵션:최소입력,디폴트=2 5)옵션:최대 입력,디폴트=100 6)옵션:최대 시간,디폴트=15
  • 설명:사용하지 않는 출력(UTXO)를 집계하여 미사용출력집합을 만들고 TXID리스트를 피드백하여 지갑 성능을 높일 수 있다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcgatherunspent", "method": "gatherunspent", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":[
                "9d968435550a9f868edb29c5b1c11d04c1b82ee004876f24d6802d5b4b6bc5ca",
                "f83d90258d4ecf9d5a92667d193352bf506b630d23cb9abd8bd7a1017f11fc75"
            ],
            "error":null,
            "id":"rpcgatherunspent"
        }

명령어: showunspent

  • 파라미터:1)옵션:최소 확인,디폴트=1 2)옵션:최대 확인,디폴트=999999 3)옵션:["address", ...],디폴트=*
  • 설명:사용하지 않는 출력리스트를 피드백한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowunspent", "method": "showunspent", "configs": [1,10,["1RK2Xo56Xn6DJznefCy3x4zKbQYQauHZzA8YAz"]] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":[
                {
                    "txid":"89699a3928665fa0520fbe672dbb1508a9147361267efba584c0a779f444b0f6",
                    "vout":0,
                    "address":"18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N",
                    "account":"",
                    "scriptPubKey":"76a91434fc71bb74878181225231f0a1597eabe060321588ac",
                    "amount":10,
                    "confirmations":2,
                    "cansend":true,
                    "spendable":true,
                    "assets":[

                    ],
                    "permissions":[

                    ]
                },
                {
                    "txid":"ba57f737e42c322aab6d21878dbc1714e474ae366e9beb559219ec7c1675d05b",
                    "vout":0,
                    "address":"18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N",
                    "account":"",
                    "scriptPubKey":"76a91434fc71bb74878181225231f0a1597eabe060321588ac",
                    "amount":10,
                    "confirmations":9,
                    "cansend":true,
                    "spendable":true,
                    "assets":[

                    ],
                    "permissions":[

                    ]
                },
                {
                    "txid":"d22c4e9b95b2ab8606178e1e9c2777db85287375bb03f808a8732d27939114de",
                    "vout":0,
                    "address":"18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N",
                    "account":"",
                    "scriptPubKey":"76a91434fc71bb74878181225231f0a1597eabe060321588ac",
                    "amount":10,
                    "confirmations":6,
                    "cansend":true,
                    "spendable":true,
                    "assets":[

                    ],
                    "permissions":[

                    ]
                },
                {
                    "txid":"de8744ccb78a303a5d43a3ebdf87bc79aedd556c6259888cfce41a316a6fe0e9",
                    "vout":0,
                    "address":"18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N",
                    "account":"",
                    "scriptPubKey":"76a91434fc71bb74878181225231f0a1597eabe060321588ac",
                    "amount":10,
                    "confirmations":7,
                    "cansend":true,
                    "spendable":true,
                    "assets":[

                    ],
                    "permissions":[

                    ]
                }
            ],
            "error":null,
            "id":"rpcshowunspent"
        }

명령어: showlock

  • 파라미터:null
  • 설명:지갑 내 사용하지 않는 사무출력잠금리스트를 피드백한다
  • JSON RPC 실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcshowlock", "method": "showlock", "configs": [] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":[
                {
                    "txid":"7ee8b7881d5bea3f73fd8b3ed61641ed3ab8ac53be681d9f04c2e46b6049ed1a",
                    "vout":0
                }
            ],
            "error":null,
            "id":"rpcshowlock"
        }

명령어: lock

  • 파라미터: 1)false|true,디폴트=false 2)옵션:[{"txid":"id","vout":n},...]
  • 설명:소비되지 않는 출력을 잠그거나 잠김을 해제한다. false=잠금,true=잠김해제
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rcplock", "method": "lock", "configs": [true] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":true,
            "error":null,
            "id":"rcplock"
        }

명령어: setuprawdeal

  • 파라미터:1)[{"txid":"TXID","vout":VOUT},...]2){"address":amount,...}3)옵션:데이터 숫자조합4)옵션:동작
  • 설명:지정된 입력을 소비하는 사무를 창설하여 지정된 주소에 발송한다。1)showunspent를 위한 TXID, VOUT의 출력 2)amount는 {"asset":qty, ...}도 가능하고 원생화폐를 직접 사용하기도 가능하다 3)데이터 숫자조합, 16진법 문자열 혹은 대상자4)동작은 다음을 포함한다:lock(지갑중의 지정된 입력을 잠금),sign(지갑암호로 거래를 사인),lock,sign,send(거래를 사인하여 발송)
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsetuprawdeal", "method": "setuprawdeal", "configs": [[{"txid":"f83d90258d4ecf9d5a92667d193352bf506b630d23cb9abd8bd7a1017f11fc75","vout":0}],{"1RK2Xo56Xn6DJznefCy3x4zKbQYQauHZzA8YAz":1}] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"010000000175fc117f01a1d78bbd9acb230d636b50bf5233197d66925a9dcf4e8d25903df80000000000ffffffff0164000000000000001976a914b3dfb19e2f5ed073f5b4f615b44a6df763ae571388ac00000000",
            "error":null,
            "id":"rpcsetuprawdeal"
        }

명령어: setuprawsendfrom

  • 파라미터: 1)from-address 2){"to-address":amount,...} 3)옵션:데이터 숫자조합 4)옵션:동작
  • 설명:setuprawdeal와 동일하고 from-address를 통해 다룬다。1)주소2)amount는 {"asset":qty, ...}도 가능하고 원생화폐를 직접 사용하기도 가능하다 3)데이터 숫자조합, 16진법 문자열 혹은 대상자 4)동작은 다음을 포함한다:lock(지갑중의 지정된 입력을 잠금),sign(지갑암호로 거래를 사인),lock,sign(양자),send(거래를 사인하여 발송)
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsetuprawsendfrom", "method": "setuprawsendfrom", "configs": ["18AMhQBLUpZffkXq2zRLz3yqDLKKaWNPfYFs1N",{"1RK2Xo56Xn6DJznefCy3x4zKbQYQauHZzA8YAz":12.2},[],"send"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"4c17a758a973a2769a38482707b25911df2fbc6d249fddbedc39044f8a222c3b",
            "error":null,
            "id":"rpcsetuprawsendfrom"
        }

명령어: decoderawdeal

  • 파라미터:TX-HEX
  • 설명:TX-HEX를 암호해독한 JSON대상자를 피드백한다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcdecoderawdeal", "method": "decoderawdeal", "configs": ["010000000175fc117f01a1d78bbd9acb230d636b50bf5233197d66925a9dcf4e8d25903df80000000000ffffffff0164000000000000001976a914b3dfb19e2f5ed073f5b4f615b44a6df763ae571388ac00000000"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":{
                "txid":"d7e2b3ac8b05f5143327e34ffc6bec5fcde9a8209576bf10bd82efc69e963f06",
                "version":1,
                "locktime":0,
                "vin":[
                    {
                        "txid":"f83d90258d4ecf9d5a92667d193352bf506b630d23cb9abd8bd7a1017f11fc75",
                        "vout":0,
                        "scriptSig":{
                            "asm":"",
                            "hex":""
                        },
                        "sequence":4294967295
                    }
                ],
                "vout":[
                    {
                        "value":1,
                        "n":0,
                        "scriptPubKey":{
                            "asm":"OP_DUP OP_HASH160 b3dfb19e2f5ed073f5b4f615b44a6df763ae5713 OP_EQUALVERIFY OP_CHECKSIG",
                            "hex":"76a914b3dfb19e2f5ed073f5b4f615b44a6df763ae571388ac",
                            "reqSigs":1,
                            "type":"pubkeyhash",
                            "addresses":[
                                "1RK2Xo56Xn6DJznefCy3x4zKbQYQauHZzA8YAz"
                            ]
                        }
                    }
                ]
            },
            "error":null,
            "id":"rpcdecoderawdeal"
        }

명령어: addrawdeal

  • 파라미터:1)TX-HEX 2)[{"txid":"id","vout":n},...] 3)옵션:{"address":amount,...} 4)옵션:데이터 숫자조합 5)옵션:동작
  • 설명:setuprawdeal와 유사하고 지정된 입력과 (일반적이나 초기 데이터의) 출력을 지정된 초기사무에 추가하여 TX-HEX하고 새 사무를 창설하는 게 아니다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:9cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcaddrawdeal", "method": "addrawdeal", "configs": ["010000000175fc117f01a1d78bbd9acb230d636b50bf5233197d66925a9dcf4e8d25903df80000000000ffffffff0164000000000000001976a914b3dfb19e2f5ed073f5b4f615b44a6df763ae571388ac00000000", [{"txid":"f83d90258d4ecf9d5a92667d193352bf506b630d23cb9abd8bd7a1017f11fc75","vout":0}], {"1RK2Xo56Xn6DJznefCy3x4zKbQYQauHZzA8YAz":13.1}] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"010000000275fc117f01a1d78bbd9acb230d636b50bf5233197d66925a9dcf4e8d25903df80000000000ffffffff75fc117f01a1d78bbd9acb230d636b50bf5233197d66925a9dcf4e8d25903df80000000000ffffffff0264000000000000001976a914b3dfb19e2f5ed073f5b4f615b44a6df763ae571388ac1e050000000000001976a914b3dfb19e2f5ed073f5b4f615b44a6df763ae571388ac00000000",
            "error":null,
            "id":"rpcaddrawdeal"
        }

명령어: addrawchange

  • 파라미터: 1)TX-HEX 2)거스름돈을 찾는 주소 3)옵션:수수료
  • 설명:setuprawdeal의 출력을 받는다. 거래입력에서 출력 시 성명되지 않은 모든 자산이나 현지화폐는 address에 발송될 것이고 수수료를 공제한다。
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcaddrawchange", "method": "addrawchange","configs":["0100000001313914201f20e294004e9dbcf52e3783ea29a54c964a9672fd48406a28252f7f0000000000ffffffff01f4010000000000001976a9142580c86b697267d47c9885bc40540a79d3564d1a88ac00000000"," 1BfCSxfRfwpMUGLSqMN2DaGX2Xkxu3n84DbJxA"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"0100000001313914201f20e294004e9dbcf52e3783ea29a54c964a9672fd48406a28252f7f0000000000ffffffff02f4010000000000001976a9142580c86b697267d47c9885bc40540a79d3564d1a88acea010000000000001976a9144edcac8f05e2c70c203f7c032dc90231688bd05f88ac00000000",
            "error":null,
            "id":"rpcaddrawchange"
        }

명령어: addrawdata

  • 파라미터:1)TX-HEX 2)16진법 데이터|대상자
  • 설명:setuprawdeal의 초기사무를 위해 TX-HEX를 출력하여 1개 데이터를 추가한다。1)TX-HEX 2)16진법 데이터|대상자, 대상자는 자산발행, 데이터모쥴, 데이터목록 등을 전달할 수 있다
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcaddrawdata", "method": "addrawdata", "configs": ["0100000001313914201f20e294004e9dbcf52e3783ea29a54c964a9672fd48406a28252f7f0000000000ffffffff02f4010000000000001976a9142580c86b697267d47c9885bc40540a79d3564d1a88acea010000000000001976a9144edcac8f05e2c70c203f7c032dc90231688bd05f88ac00000000","f83d90258d4ecf9d5a92667d193352bf506b630d23cb9abd8bd7a1017f11fc75"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":"0100000001313914201f20e294004e9dbcf52e3783ea29a54c964a9672fd48406a28252f7f0000000000ffffffff03f4010000000000001976a9142580c86b697267d47c9885bc40540a79d3564d1a88acea010000000000001976a9144edcac8f05e2c70c203f7c032dc90231688bd05f88ac0000000000000000226a20f83d90258d4ecf9d5a92667d193352bf506b630d23cb9abd8bd7a1017f11fc7500000000",
            "error":null,
            "id":"addrawdata"
        }

명령어: signrawdeal

  • 파라미터:1)TX-HEX 2)옵션:[{parent-output},...] 3)옵션["private-key",...] 4)옵션sighashtype,디폴트=ALL
  • 설명:초기거래를 사인한다 1)TX-HEX 2)선택 가능한{parent-output} 대상자 숫자조합을 전달하고 형식이 {"txid":txid,"vout":n,"scriptPubKey":hex}임 3)콜드노드 사인으로 "private-key" 문자열 숫자조합을 전달 4)sighashtype 파라미터로 사인범위를 제어
  • JSON RPC실현 참조:

발송:

curl --user rubyrpc:cQ5bCjbxxxxxxxxxxxxxxxxxxx2kM --data-binary '{"jsonrpc": "2.0", "id":"rpcsignrawdeal", "method": "signrawdeal", "configs": ["0100000001313914201f20e294004e9dbcf52e3783ea29a54c964a9672fd48406a28252f7f0000000000ffffffff03f4010000000000001976a9142580c86b697267d47c9885bc40540a79d3564d1a88acea010000000000001976a9144edcac8f05e2c70c203f7c032dc90231688bd05f88ac0000000000000000226a20f83d90258d4ecf9d5a92667d193352bf506b630d23cb9abd8bd7a1017f11fc7500000000"] }' -H 'content-type: text/plain;' http://127.0.0.1:5112

귀환:

        {
            "result":{
                "hex":"0100000001313914201f20e294004e9dbcf52e3783ea29a54c964a9672fd48406a28252f7f000000006a4730440220432e2f2f9f7252085b262f168860378791aca93fbccfabd8eccabaa11078c63002203655a24a4e07c794e6ca4b0f43aa694e8e027c0d43b4ef9fba818037e9ef1e1e01210298102aab3caf958614ee7f83b04771b507cf2335be6f3fc8daf1da108cef6b07ffffffff03f4010000000000001976a9142580c86b697267d47c9885bc40540a79d3564d1a88acea010000000000001976a9144edcac8f05e2c70c203f7c032dc90231688bd05f88ac0000000000000000226a20f83d90258d4ecf9d5a92667d193352bf506b630d23cb9abd8bd7a1017f11fc7500000000",
                "complete":true
            },
            "error":null,
            "id":"rpcsignrawdeal"
        }

교육과정 사례

일반거래 사례

루비는 UTXO모델을 기반층 메모리의 데이터구조로 적용하는데 전칭이 Unspent Transaction output이고 즉 사용하지 않는 거래아웃풋이다. 계좌 내의 잔액은 숫자로 표시하는 게 아니라 당시 블록체인네트워크에서 당시 계좌와 관련된 모든 UTXO로 구성되어있다. 루비네트워크에 2가지 자산이 있는데 하나는 블록체인네트워크의 기반층에서 실행하는 원생화폐이고 공감알고리즘을 통해 생성되며 부호가 없고 기반층에서 ""로 표시되며 모든 자산의 이체거래가 원생화폐를 소모하고 쉬운 식별을 위해 RUB라고 부르며 다른 하나는 발행자산으로서 루비메인넷에 기반한 사업자들이 발행하는 디지털자산이고 통상적으로 관련 부호로 표시한다. 모든 계좌가 이체거래 혹은 사무처리 시 계좌에 일정한 수량의 RUB를 확보하여야 하고 아니면 이체를 성공적으로 진행할 수 없다.

여러 새 주소를 창설하기

addnewaddr
addnewaddr
addnewaddr

devruby: addnewaddr
19ViSoAti9sfg6h6b5wFMZqGcDgwGQabkjZNpq
devruby: addnewaddr
1QWrUVZojbHFTmAYvornv63G7eD891Jm6fx1a5
devruby: addnewaddr
1XAv8b13XE6YoCm4rGHBhhwif4E7jQi55EZrFt

원생화폐(RUB)와 자산을 발송하기

원생화폐 발송하기

send 19ViSoAti9sfg6h6b5wFMZqGcDgwGQabkjZNpq 10

devruby: send 19ViSoAti9sfg6h6b5wFMZqGcDgwGQabkjZNpq 10
6be96001307eea1dc0039a2dd1166b8bfd1143c956b0638c23229927a6ac1517

devruby: sendfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C 19ViSoAti9sfg6h6b5wFMZqGcDgwGQabkjZNpq 15
b52ae5c8e3909c0b80229e2b41fb58b53ed6b7201b9387f2b8116fa83f336e05

단일자산 발송하기

send 1QWrUVZojbHFTmAYvornv63G7eD891Jm6fx1a5 '{"AOC":10}'
devruby: send 1QWrUVZojbHFTmAYvornv63G7eD891Jm6fx1a5 '{"AOC":10}'
50cc5e118c833dc29e8ccd67f870f3c2d363230fe0682b068b48bae5d8786811

sendfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C 1QWrUVZojbHFTmAYvornv63G7eD891Jm6fx1a5 '{"AOC":15}'
devruby: sendfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C 1QWrUVZojbHFTmAYvornv63G7eD891Jm6fx1a5 '{"AOC":15}'
4f8c2fc8cb0b701d6c2fafc4a3a4d633d31a4db72c988d04834e0b399706e1a2

여러 자산 발송하기

send 1XAv8b13XE6YoCm4rGHBhhwif4E7jQi55EZrFt '{"AOC":10,"TOC":5}'
devruby: send 1XAv8b13XE6YoCm4rGHBhhwif4E7jQi55EZrFt '{"AOC":10,"TOC":5}'
9f8af0784f1fbc993eb032bd4d56a4ec628a6865f5aa4a0489c4b63d2dac81d5

sendfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C  1XAv8b13XE6YoCm4rGHBhhwif4E7jQi55EZrFt '{"AOC":15,"TOC":15}'
devruby: sendfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C  1XAv8b13XE6YoCm4rGHBhhwif4E7jQi55EZrFt '{"AOC":15,"TOC":15}'
73f01a8482256773157eebc86876378ead73169ac74df7da206c13c691b0bbf2

자산설계 및 자산창설 사례

루비는 UTXO모델을 적용한 원생적인 블록체인급 자산을 지원한다. 자산을 창설할 때 개방형이나 폐쇄형으로 설치할 수 있다. 자산이 개방형인 경우 추후에 자산을 추가 발행할 수 있다. 자산을 발행할 때 선택 가능한 초기데이터를 포함시킬 수 있는데 이러한 초기 데이터는 sell(from) API의 파라미터에서 제공된다.

자산발행

  • 자산을 창설할 수 있는 주소 A1를 찾아낸다.

    showaddrs
    devruby: showaddrs
    [
      {
          "address" : "14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C",
          "ismine" : true,
          "iswatchonly" : false,
          "isscript" : false,
          "pubkey" : "0202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64c",
          "iscompressed" : true,
          "synchronized" : true
      }
    ]
  • AOC의 개방형 자산을 발표하고 10000개 자산단위를 창설하며 자산단위마다 100개 부분으로 분할할 수 있도록 한다.

    sellfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C '{"name":"AOC","open":true}' 10000 0.01 
    devruby: sellfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C '{"name":"AOC","open":true}' 10000 0.01
    2ccac70fe46b1e25db530645dcae8b8996a167dd5a984fd14c9401d992aead89
    
    TXID를 피드백한다。
  • 자산조회:

    showassets AOC
    devruby: showassets AOC
    [
      {
          "name" : "AOC",
          "selltxid" : "2ccac70fe46b1e25db530645dcae8b8996a167dd5a984fd14c9401d992aead89",
          "assetref" : "9-299-51756",
          "multiple" : 100,
          "units" : 0.01,
          "open" : true,
          "restrict" : {
              "send" : false,
              "receive" : false
          },
          "details" : {
          },
          "sellqty" : 10000,
          "sellraw" : 1000000,
          "ordered" : false
      }
    ]
    
    "open" : true문자열은 추가 발행할 수 있다는 뜻,sellqty발행수량。
  • 주소A1의 자산잔액을 조회한다. 10000일 것이다:

    showaddrbals 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C
    devruby: showaddrbals 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C
    [
      {
          "name" : "AOC",
          "assetref" : "9-299-51756",
          "qty" : 10000
      },
      {
          "assetref" : "",
          "qty" : 10080,
          "raw" : 1008000
      }
    ]

자산을 추가 발행하기

  • 새 주소 A2를 창설하여 새 단위를 수령한다.:

    addnewaddr
    devruby: addnewaddr
    1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr

주소 A2를 확보한다

  • A2에 12000단위의 AOC를 발행한다:

    sellassetfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C 1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr AOC 12000 0.01
    devruby: sellassetfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C 1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr AOC 12000 0.01
    b538331c6ff7a1f4325e7dad9b8410aee5ae4c9c6fba5ccf2c7c80f9b72f773a

TXID를 피드백한다。

  • 자산상태의 상세한 정보를 체크한다

    showassets AOC true
    devruby: showassets AOC true
    [
      {
          "name" : "AOC",
          "selltxid" : "2ccac70fe46b1e25db530645dcae8b8996a167dd5a984fd14c9401d992aead89",
          "assetref" : "9-299-51756",
          "multiple" : 100,
          "units" : 0.01,
          "open" : true,
          "restrict" : {
              "send" : false,
              "receive" : false
          },
          "details" : {
          },
          "sellqty" : 22000,
          "sellraw" : 2200000,
          "ordered" : false,
          "sells" : [
              {
                  "txid" : "2ccac70fe46b1e25db530645dcae8b8996a167dd5a984fd14c9401d992aead89",
                  "qty" : 10000,
                  "raw" : 1000000,
                  "details" : {
                  },
                  "sellers" : [
                      "14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C"
                  ]
              },
              {
                  "txid" : "b538331c6ff7a1f4325e7dad9b8410aee5ae4c9c6fba5ccf2c7c80f9b72f773a",
                  "qty" : 12000,
                  "raw" : 1200000,
                  "details" : {
                  },
                  "sellers" : [
                      "14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C"
                  ]
              }
          ]
      }
    ]
  • 위 2개 주소의 신규자산 잔액을 조회한다:

    showallbals * AOC
    devruby: showallbals * AOC
    {
      "14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C" : [
          {
              "name" : "AOC",
              "assetref" : "9-299-51756",
              "qty" : 10000
          },
          {
              "assetref" : "",
              "qty" : 10119.97,
              "raw" : 1011997
          }
      ],
      "1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr" : [
          {
              "name" : "AOC",
              "assetref" : "9-299-51756",
              "qty" : 12000
          },
          {
              "assetref" : "",
              "qty" : 0.01,
              "raw" : 1
          }
      ],
      "total" : [
          {
              "name" : "AOC",
              "assetref" : "9-299-51756",
              "qty" : 22000
          },
          {
              "assetref" : "",
              "qty" : 10119.98,
              "raw" : 1011998
          }
      ]
    }

조회결과, A1에 1000개 USD가 있고 A2에 12000개 AOC가 있으며 토탈로 22000개 AOC가 있다。

원자교환설계 및 화폐간 환전거래 사례

화폐간 환전 원리

모든 루비거래는 여러 입력과 출력이 있을 수 있고 거래마다 블록체인위의 서로 다른 주소와 관련될 수 있다. 룹는 많은 API를 제공하여 원자교환을 쉽게 진행할 수 있도록 한다. 일방은 먼저 prelock (from)와 setuprawex로 교환오퍼를 창설하는데 이 오퍼에 그들이 제공하는 자산과 수량을 지정하고 요구하는 자산과 수량으로 된 보수를 지정한다. 이 오퍼는 일부 거래로 표시되고 발행자가 1개 입력과 1개 출력을 사인한 후 약정을 대표하는 일부 거래를 특정한 상대방에게 발송하거나 모든 자가 열람하여 받아들일 수 있도록 한다. 이러한 커뮤니케이션이 블록체인브라우저에 발표하는 기능을 사용하는 등 블록체인에서 진행할 수 있거나 필요한 방법으로 오프체인으로도 처리할 수 있다. 초청을 받은 다른 참여자가 이를 사용하여 decoderawex를 심사하여 받아들이는지를 결정할 수 있다. 이리하여 최종거래가 균형이 실현되어 sendrawdeal네트워크에 방송할 수 있다. 또한 루비는 disrawdeal API를 제공하여 발표한 후 오퍼사용을 금지할 수 있도록 한다.

자산발행

  • AOC, TOC 2가지 자산을 발행한다. 노드 1에서 이를 집행하도록 하고 자산창설 가능한 주소 A1를 찾아 자산을 창설한다

    showaddrs
    devruby: showaddrs
    [
      {
          "address" : "14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C",
          "ismine" : true,
          "iswatchonly" : false,
          "isscript" : false,
          "pubkey" : "0202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64c",
          "iscompressed" : true,
          "synchronized" : true
      }
    ]
    
    sellfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C '{"name":"AOC","open":true}' 22000 0.01 
    devruby: sellfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C '{"name":"AOC","open":true}' 22000 0.01
    2ccac70fe46b1e25db530645dcae8b8996a167dd5a984fd14c9401d992aead89

TXID를 피드백한다。

  • 노드2에서 집행하도록 하고 자산창설 가능한 주소 A2를 찾아 자산을 창설한다.

    showaddrs
    devruby: showaddrs
    [
      {
          "address" : "1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd",
          "ismine" : true,
          "iswatchonly" : false,
          "isscript" : false,
          "pubkey" : "03b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69",
          "iscompressed" : true,
          "synchronized" : true
      }
    ]
    sellfrom 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd TOC 5000 0.01
    
    devruby: sellfrom 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd TOC 5000 0.01
    7c820ae721cdbd260981ae79359c953a616a8df0868b00fe467a96032336ae05

TXID를 피드백한다 。

  • 위 2개 노드에서 자산상황을 조회한다。

    showassets
    devruby: showassets
    [
      {
          "name" : "AOC",
          "selltxid" : "2ccac70fe46b1e25db530645dcae8b8996a167dd5a984fd14c9401d992aead89",
          "assetref" : "9-299-51756",
          "multiple" : 100,
          "units" : 0.01,
          "open" : true,
          "restrict" : {
              "send" : false,
              "receive" : false
          },
          "details" : {
          },
          "sellqty" : 22000,
          "sellraw" : 2200000,
          "ordered" : false
      },
      {
          "name" : "TOC",
          "selltxid" : "7c820ae721cdbd260981ae79359c953a616a8df0868b00fe467a96032336ae05",
          "assetref" : "41-299-33404",
          "multiple" : 100,
          "units" : 0.01,
          "open" : false,
          "restrict" : {
              "send" : false,
              "receive" : false
          },
          "details" : {
          },
          "sellqty" : 5000,
          "sellraw" : 500000,
          "ordered" : false
      }
    ]

위 2개 노드에서 최소단위인 0.01인 22000개 AOC자산과 최소단위인 0.01인 5000개 TOC자산을 나타낸다. 위 2개 노드의 잔액을 조회한다:

showaddrbals 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C

showaddrbals 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd
devruby: showaddrbals 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C
[
    {
        "name" : "AOC",
        "assetref" : "9-299-51756",
        "qty" : 22000
    },
    {
        "assetref" : "",
        "qty" : 10249.96,
        "raw" : 1024996
    }
]
devruby: showaddrbals 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd
[
    {
        "name" : "TOC",
        "assetref" : "41-299-33404",
        "qty" : 5000
    },
    {
        "assetref" : "",
        "qty" : 230,
        "raw" : 23000
    }
]

노드1에서 22000개 AOC자산을 나타내고 노드2에서 5000개 TOC자산을 나타낸다.

점 대 점 원자교환

목표 : 간단한 원자교환을 실행하여 노드1의 1000개 AOC로 노드2의 500개 TOC를 교환하도록 한다.

  • 노드2 : 500개 TOC를 포함한 잠겨진 거래출력을 창설한다:

    prelockfrom 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd '{"TOC":500, "":0.01}'
    devruby: prelockfrom 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd '{"TOC":500, "":0.01}'
    {
      "txid" : "b6bb4dbdf088a0d1cdcb6db451c1bd9de80b59e449488301627f5c706ce3bf11",
      "vout" : 0
    }

txid:b6bb4dbdf088a0d1cdcb6db451c1bd9de80b59e449488301627f5c706ce3bf11를 얻는다 vout:0를 얻는다

  • 노드2 : 거래를 창설하여 1000개 AOC 교환을 지정한다:

    setuprawex b6bb4dbdf088a0d1cdcb6db451c1bd9de80b59e449488301627f5c706ce3bf11 0 '{"AOC":1000}'
    devruby: setuprawex b6bb4dbdf088a0d1cdcb6db451c1bd9de80b59e449488301627f5c706ce3bf11 0 '{"AOC":1000}'
    010000000111bfe36c705c7f6201834849e4590be89dbdc151b46dcbcdd1a088f0bd4dbbb6000000006a4730440220436a234c20c966a4f4761d2b1374bb3d06c1f74eb02bc38e64bcc17374b1ab4a022054e7511e6faebfd64d26bfa0bb4542cdc31226f25e1d1e1a9ffcba417c30cee2832103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69ffffffff0100000000000000003776a91479d9131dc9606540704e4786a2eaef1ba93c5c3888ac1c73706b71898baedc450653db251e6be40fc7ca2ca0860100000000007500000000

교환오퍼를 표시한 원시거래데이터를 포함한 16진법 텍스트블록을 출력한다. 텍스트블록을 HEX1라고 표시한다.

  • 노드1 : decoderawex HEX1

    devruby: decoderawex 010000000111bfe36c705c7f6201834849e4590be89dbdc151b46dcbcdd1a088f0bd4dbbb6000000006a4730440220436a234c20c966a4f4761d2b1374bb3d06c1f74eb02bc38e64bcc17374b1ab4a022054e7511e6faebfd64d26bfa0bb4542cdc31226f25e1d1e1a9ffcba417c30cee2832103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69ffffffff0100000000000000003776a91479d9131dc9606540704e4786a2eaef1ba93c5c3888ac1c73706b71898baedc450653db251e6be40fc7ca2ca0860100000000007500000000
    {
      "offer" : {
          "amount" : 0.01,
          "assets" : [
              {
                  "name" : "TOC",
                  "assetref" : "41-299-33404",
                  "qty" : 500
              }
          ]
      },
      "ask" : {
          "amount" : 0,
          "assets" : [
              {
                  "name" : "AOC",
                  "assetref" : "9-299-51756",
                  "qty" : 1000
              }
          ]
      },
      "requiredfee" : 0.04,
      "candisable" : false,
      "cancomplete" : true,
      "complete" : false
    }

오퍼 : 500개 TOC ask를 제공한다 : 1000개 AOC 교환을 요청한다. cancomplete:true는 노드2에서 교환거래완료에 필요한 자산이 있다고 의미한다

  • 노드1 : 1000개 AOC인 잠겨진 거래출력을 창설한다

    prelockfrom 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C '{"AOC":1000, "":0.2}'
    devruby: prelockfrom 14rCRwYD4ttaZFFwWAMbo76tcNMDAQSPWaek4C '{"AOC":1000, "":00.2}'
    {
      "txid" : "066fde3d1bf64a9bd93f0318e0cb254ab3701ab566e379a767c89ee807360c97",
      "vout" : 0
    }

txid:066fde3d1bf64a9bd93f0318e0cb254ab3701ab566e379a767c89ee807360c97를 얻는다 vout:0를 얻는다

  • 노드1 : 환전거래에 첨가하여 500개 TOC교환접수를 확인한다

    addrawex 010000000111bfe36c705c7f6201834849e4590be89dbdc151b46dcbcdd1a088f0bd4dbbb6000000006a4730440220436a234c20c966a4f4761d2b1374bb3d06c1f74eb02bc38e64bcc17374b1ab4a022054e7511e6faebfd64d26bfa0bb4542cdc31226f25e1d1e1a9ffcba417c30cee2832103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69ffffffff0100000000000000003776a91479d9131dc9606540704e4786a2eaef1ba93c5c3888ac1c73706b71898baedc450653db251e6be40fc7ca2ca0860100000000007500000000 066fde3d1bf64a9bd93f0318e0cb254ab3701ab566e379a767c89ee807360c97 0 '{"TOC":500}'

보다 긴 16진법 텍스트블록을 출력하여 HEX2라고 표시한다

devruby: addrawex 010000000111bfe36c705c7f6201834849e4590be89dbdc151b46dcbcdd1a088f0bd4dbbb6000000006a4730440220436a234c20c966a4f4761d2b1374bb3d06c1f74eb02bc38e64bcc17374b1ab4a022054e7511e6faebfd64d26bfa0bb4542cdc31226f25e1d1e1a9ffcba417c30cee2832103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69ffffffff0100000000000000003776a91479d9131dc9606540704e4786a2eaef1ba93c5c3888ac1c73706b71898baedc450653db251e6be40fc7ca2ca0860100000000007500000000 066fde3d1bf64a9bd93f0318e0cb254ab3701ab566e379a767c89ee807360c97 0 '{"TOC":500}'
{
    "hex" : "010000000211bfe36c705c7f6201834849e4590be89dbdc151b46dcbcdd1a088f0bd4dbbb6000000006a4730440220436a234c20c966a4f4761d2b1374bb3d06c1f74eb02bc38e64bcc17374b1ab4a022054e7511e6faebfd64d26bfa0bb4542cdc31226f25e1d1e1a9ffcba417c30cee2832103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69ffffffff970c3607e89ec867a779e366b51a70b34a25cbe018033fd99b4af61b3dde6f06000000006a473044022031bc3d21c21d57764f16ba59d336ae196a0769870726346d2e426ff7d6d41d390220384a7ea927281c59c46ebc66241a8b17cf9b5af68be31b42c1a96cf2d132641983210202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64cffffffff0200000000000000003776a91479d9131dc9606540704e4786a2eaef1ba93c5c3888ac1c73706b71898baedc450653db251e6be40fc7ca2ca0860100000000007500000000000000003776a9141c790510cce5faf2b25c8206830cad978376792788ac1c73706b713a959c3579ae810926bdcd21e70a827c50c30000000000007500000000",
    "complete" : true
}

complete:true는 거래가 100% 사인되어 방송과 확인에 준비된다고 의미한다.

  • 노드1 : 블록체인에 제출한다
  • sendrawdeal HEX2
    devruby: sendrawdeal 010000000211bfe36c705c7f6201834849e4590be89dbdc151b46dcbcdd1a088f0bd4dbbb6000000006a4730440220436a234c20c966a4f4761d2b1374bb3d06c1f74eb02bc38e64bcc17374b1ab4a022054e7511e6faebfd64d26bfa0bb4542cdc31226f25e1d1e1a9ffcba417c30cee2832103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69ffffffff970c3607e89ec867a779e366b51a70b34a25cbe018033fd99b4af61b3dde6f06000000006a473044022031bc3d21c21d57764f16ba59d336ae196a0769870726346d2e426ff7d6d41d390220384a7ea927281c59c46ebc66241a8b17cf9b5af68be31b42c1a96cf2d132641983210202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64cffffffff0200000000000000003776a91479d9131dc9606540704e4786a2eaef1ba93c5c3888ac1c73706b71898baedc450653db251e6be40fc7ca2ca0860100000000007500000000000000003776a9141c790510cce5faf2b25c8206830cad978376792788ac1c73706b713a959c3579ae810926bdcd21e70a827c50c30000000000007500000000

TXID를 피드백한다。 9bb777b7123b521022c15c99e39a3d57da59b4ffdc28af6ca914e7ed3d2ed904

  • 교환이 성공했는지 검사한다.

    showaddrbals 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd
    showaddrbasl 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C
    devruby: showaddrbals 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd
    [
      {
          "name" : "AOC",
          "assetref" : "9-299-51756",
          "qty" : 1000
      },
      {
          "name" : "TOC",
          "assetref" : "41-299-33404",
          "qty" : 4500
      },
      {
          "assetref" : "",
          "qty" : 380.06,
          "raw" : 38006
      }
    ]
    devruby: showaddrbals 14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C
    [
      {
          "name" : "AOC",
          "assetref" : "9-299-51756",
          "qty" : 21000
      },
      {
          "name" : "TOC",
          "assetref" : "41-299-33404",
          "qty" : 500
      },
      {
          "assetref" : "",
          "qty" : 10339.97,
          "raw" : 1033997
      }
    ]

노드1에 1000개AOC와 4500개 TOC가 있고 노드2에 21000개 AOC와 500개 TOC가 있다.

거래취소

접수와 방송전에 교환를 어떻게 취소하는지 소개한다.

  • 노드2

    prelockfrom 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd '{"TOC":800,"":0.1}'
    devruby: prelockfrom 1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd '{"TOC":800,"":0.1}'
    {
      "txid" : "a2e6346e04d9133387d7060af575f0c3a6e3db909725e39c9ad94cb2149ad2fa",
      "vout" : 0
    }

txid:a2e6346e04d9133387d7060af575f0c3a6e3db909725e39c9ad94cb2149ad2fa를 얻는다 vout:0를 얻는다

  • 노드2

    setuprawex a2e6346e04d9133387d7060af575f0c3a6e3db909725e39c9ad94cb2149ad2fa 0 '{"AOC":1600}'
    devruby: setuprawex a2e6346e04d9133387d7060af575f0c3a6e3db909725e39c9ad94cb2149ad2fa 0 '{"AOC":1600}'
    0100000001fad29a14b24cd99a9ce3259790dbe3a6c3f075f50a06d7873313d9046e34e6a2000000006b483045022100ae2fbea3a1bf300cf58edfb6bb0d9ab65af49a5f07fab32e589dea2ce0f415fd022000d05839acc16b107d23dec3467628fc841590b85837c2ff276d0ddeddc48f0c832103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69ffffffff0100000000000000003776a91479d9131dc9606540704e4786a2eaef1ba93c5c3888ac1c73706b71898baedc450653db251e6be40fc7ca2c00710200000000007500000000

HEX1를 복사하여 붙인다

  • 노드2에서 집행하도록 한다:

    decoderawex HEX1
    devruby: decoderawex 0100000001fad29a14b24cd99a9ce3259790dbe3a6c3f075f50a06d7873313d9046e34e6a2000000006b483045022100ae2fbea3a1bf300cf58edfb6bb0d9ab65af49a5f07fab32e589dea2ce0f415fd022000d05839acc16b107d23dec3467628fc841590b85837c2ff276d0ddeddc48f0c832103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69ffffffff0100000000000000003776a91479d9131dc9606540704e4786a2eaef1ba93c5c3888ac1c73706b71898baedc450653db251e6be40fc7ca2c00710200000000007500000000
    {
      "offer" : {
          "amount" : 0.1,
          "assets" : [
              {
                  "name" : "TOC",
                  "assetref" : "41-299-33404",
                  "qty" : 800
              }
          ]
      },
      "ask" : {
          "amount" : 0,
          "assets" : [
              {
                  "name" : "AOC",
                  "assetref" : "9-299-51756",
                  "qty" : 1600
              }
          ]
      },
      "requiredfee" : 0.05,
      "candisable" : true,
      "cancomplete" : true,
      "complete" : false
    }

문자열 candisable : true는 노드2에서 위 화폐간거래를 금지할 수 있다고 의미한다.

  • 방송하기 전에 교환을 금지하고 노드2에서 집행하도록 한다:

    disrawdeal HEX1
    devruby: disrawdeal 0100000001fad29a14b24cd99a9ce3259790dbe3a6c3f075f50a06d7873313d9046e34e6a2000000006b483045022100ae2fbea3a1bf300cf58edfb6bb0d9ab65af49a5f07fab32e589dea2ce0f415fd022000d05839acc16b107d23dec3467628fc841590b85837c2ff276d0ddeddc48f0c832103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69ffffffff0100000000000000003776a91479d9131dc9606540704e4786a2eaef1ba93c5c3888ac1c73706b71898baedc450653db251e6be40fc7ca2c00710200000000007500000000
    2e4bee2a8185e4068f3ab76b8e231134f6b5d83037284cf2616c4a4a48d61fda

TXID를 피드백하여 거래가 다시 확인되지 못한다고 의미한다.

  • 임의의 노드에서 교환이 더 이상 유효하지 않다고 검증하도록 한다:

    decoderawex HEX1
    devruby: decoderawex 0100000001fad29a14b24cd99a9ce3259790dbe3a6c3f075f50a06d7873313d9046e34e6a2000000006b483045022100ae2fbea3a1bf300cf58edfb6bb0d9ab65af49a5f07fab32e589dea2ce0f415fd022000d05839acc16b107d23dec3467628fc841590b85837c2ff276d0ddeddc48f0c832103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69ffffffff0100000000000000003776a91479d9131dc9606540704e4786a2eaef1ba93c5c3888ac1c73706b71898baedc450653db251e6be40fc7ca2c00710200000000007500000000
    error code: -820
    error message:
    Missing inputs; Input: 0, txid: a2e6346e04d9133387d7060af575f0c3a6e3db909725e39c9ad94cb2149ad2fa, vout: 0

오류 하나가 생긴 경우 1개 입력이 이미 사용되었다고 의미한다.

공동관리 계약계좌 거래 및 사례

공동관리 계약계좌 소개

오픈 키 암호화는 비대칭 암호학이라고도 하고 블록체인의 관건적 기술이다. 체인의 참여자가 자기의 프라이빗 키와 공공주소 짝을 생성하도록 한다. 그들이 프라이빗 키를 스스로 보관하지만 관련 주소를 자유롭게 분배한다. 특정한 주소에 작업을 실행하는 블록체인거래(예를 들어 자금사용)는 해당 프라이빗 키가 사인하도록 하여야 한다. 체인위의 모든 참여자가 서로의 프라이빗 키를 조회하기 필요없이 공공주소로 위 서명을 검증할 수 있다. 공동관리 계약계좌가 다중적인 서명이라고도 하고 주소와 거래가 여러 자가 공동으로 관리하는 체인위에 신분을 창설하여 위 모델을 확장하도록 한다. 루비는 " m/n " 다중사인주소를 사용하는데 n개 일반주소를 설정하여 적어도m개 주소에 해당한 프라이빗 키가 사무에 동시에 사인하여야 거래나 사무를 실행할 수 있다.

공동관리 계약계약주소를 창설하기

  • 주소 조회 노드1 : 이하 명령을 실행한다.

    showaddrs
    devruby: showaddrs
    [
      {
          "address" : "14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C",
          "ismine" : true,
          "iswatchonly" : false,
          "isscript" : false,
          "pubkey" : "0202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64c",
          "iscompressed" : true,
          "synchronized" : true
      },
    ]

주소A1를 얻는다. 노드2 : 같은 명령을 실행한다

showaddrs
devruby: showaddrs
[
    {
        "address" : "1HUATibdVq4kCWW5QjCMrFcEEPv4yEDMsAQrZd",
        "ismine" : true,
        "iswatchonly" : false,
        "isscript" : false,
        "pubkey" : "03b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69",
        "iscompressed" : true,
        "synchronized" : true
    }
]

주소 A2를 얻는다

  • 공동관리계좌를 창설한다 노드1는 이하 명령을 실행하여 2/2인 다중적인 주소를 창설하고 이를 노드 지갑에 참가한다.:

    addmultiaddr 2 '["A1-pubke", "A2-pubkey"]'
    addmultiaddr 2 '["0202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64c", "03b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69"]'
    devruby: addmultiaddr 2 '["0202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64c", "03b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69"]'
    4a8u54or6cdyykcMP5Kbb7BNUUaW9fgkR6RuAY

다중적인 사인주소 MA1A2를 얻고 자동적으로 추적을 시작하도록 한다. 노드2에서 노드1의 명령을 다시 실행할 수 있다.

addmultiaddr  2 '["A1-pubkey", "A2-pubkey"]'
devruby: addmultiaddr 2 '["0202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64c", "03b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f69"]'
4a8u54or6cdyykcMP5Kbb7BNUUaW9fgkR6RuAY

다중적인 사인주소 4a8u54or6cdyykcMP5Kbb7BNUUaW9fgkR6RuAY를 얻고 자동적으로 추적을 시작하도록 한다.

다중사인주소에 자산을 발송한다

devruby: send 4a8u54or6cdyykcMP5Kbb7BNUUaW9fgkR6RuAY '{"AOC":1000,"":100}' f9ed056fb76e0e4bc194180ae27feb4acdd761c227c797391320fddc81138af0
showaddrbals 4a8u54or6cdyykcMP5Kbb7BNUUaW9fgkR6RuAY
devruby: showaddrbals 4a8u54or6cdyykcMP5Kbb7BNUUaW9fgkR6RuAY
[
    {
        "name" : "AOC",
        "assetref" : "9-299-51756",
        "qty" : 1000
    },
    {
        "assetref" : "",
        "qty" : 100,
        "raw" : 10000
    }
]

1000개 TOC인 100 원생자산을 나타낸다.

공동관리 계약계좌를 통해 거래하기

공동관리계약계좌를 통해 자금을 발송한다. 이는 2/2인 공동관리계약계좌이므로 이러한 과정이 2개 주소의 공동 사인이 필요하다.

  • 노드1 : 거래를 창설하여 일부를 사인한다

    setuprawsendfrom 4a8u54or6cdyykcMP5Kbb7BNUUaW9fgkR6RuAY '{"1Ltnj5zUQFs7dtZymsVMxW4daPfGhGdiXLkxgc ":{"AOC":500}}' '[]' sign
    devruby: setuprawsendfrom 4a8u54or6cdyykcMP5Kbb7BNUUaW9fgkR6RuAY '{"1Ltnj5zUQFs7dtZymsVMxW4daPfGhGdiXLkxgc ":{"AOC":500}}' '[]' sign
    {
      "hex" : "0100000001f08a1381dcfd20133997c727c261d7cd4aeb7fe20a1894c14b0e6eb76f05edf900000000910047304402201343b86f05f4c41df9d40d34e51024fd301eb0fb3c7553c11eea9dfdb929095502206f1f2edaef84dfe8c3aa90fc2f0d5e751a3e7bebb668948459f0b7d9fe11e25b014752210202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64c2103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f6952aeffffffff0300000000000000003776a914932fa510d99fecc0a651045fac83278dfc1d3e2f88ac1c73706b71898baedc450653db251e6be40fc7ca2c50c300000000000075000000000000000035a914fc95cb46ce2d0bec33babf6ef4b52ca54ac89133871c73706b71898baedc450653db251e6be40fc7ca2c50c3000000000000750c2700000000000017a914fc95cb46ce2d0bec33babf6ef4b52ca54ac891338700000000",
      "complete" : false
    }

complete:false에 피드백하고 16진법hex 문자열 HEX1이다. 일부 사인되었다.

  • 노드2 사인:

    signrawdeal HEX1
    devruby: signrawdeal 0100000001f08a1381dcfd20133997c727c261d7cd4aeb7fe20a1894c14b0e6eb76f05edf900000000910047304402201343b86f05f4c41df9d40d34e51024fd301eb0fb3c7553c11eea9dfdb929095502206f1f2edaef84dfe8c3aa90fc2f0d5e751a3e7bebb668948459f0b7d9fe11e25b014752210202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64c2103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f6952aeffffffff0300000000000000003776a914932fa510d99fecc0a651045fac83278dfc1d3e2f88ac1c73706b71898baedc450653db251e6be40fc7ca2c50c300000000000075000000000000000035a914fc95cb46ce2d0bec33babf6ef4b52ca54ac89133871c73706b71898baedc450653db251e6be40fc7ca2c50c3000000000000750c2700000000000017a914fc95cb46ce2d0bec33babf6ef4b52ca54ac891338700000000
    {
      "hex" : "0100000001f08a1381dcfd20133997c727c261d7cd4aeb7fe20a1894c14b0e6eb76f05edf900000000d90047304402201343b86f05f4c41df9d40d34e51024fd301eb0fb3c7553c11eea9dfdb929095502206f1f2edaef84dfe8c3aa90fc2f0d5e751a3e7bebb668948459f0b7d9fe11e25b0147304402206387f7d8978c25c6930d2035495a635b913ac6e8cc004390b2ebb906c78a2976022015ffd56f56b27d393f4d398b25376e722d1b60f34d5fa3754978fe11dc074811014752210202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64c2103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f6952aeffffffff0300000000000000003776a914932fa510d99fecc0a651045fac83278dfc1d3e2f88ac1c73706b71898baedc450653db251e6be40fc7ca2c50c300000000000075000000000000000035a914fc95cb46ce2d0bec33babf6ef4b52ca54ac89133871c73706b71898baedc450653db251e6be40fc7ca2c50c3000000000000750c2700000000000017a914fc95cb46ce2d0bec33babf6ef4b52ca54ac891338700000000",
      "complete" : true
    }

complete:true에 피드백하고 16진법hex 문자열 HEX2이다. 이는 거래사인이 이미 완료되어 블록체인에 방송할 수 있다고 의미한다.

  • 블록체인네트워크에 방송하여 실행한다:

    sendrawdeal HEX2
    devruby: sendrawdeal 0100000001f08a1381dcfd20133997c727c261d7cd4aeb7fe20a1894c14b0e6eb76f05edf900000000d90047304402201343b86f05f4c41df9d40d34e51024fd301eb0fb3c7553c11eea9dfdb929095502206f1f2edaef84dfe8c3aa90fc2f0d5e751a3e7bebb668948459f0b7d9fe11e25b0147304402206387f7d8978c25c6930d2035495a635b913ac6e8cc004390b2ebb906c78a2976022015ffd56f56b27d393f4d398b25376e722d1b60f34d5fa3754978fe11dc074811014752210202fd31386c4f6d9c2fe473b75718a07f669311160c47df3ed68b86c8d172e64c2103b45d91947b5f38a181fdeb92e6b82b54186eccba9fa8f2004618e3dd708b4f6952aeffffffff0300000000000000003776a914932fa510d99fecc0a651045fac83278dfc1d3e2f88ac1c73706b71898baedc450653db251e6be40fc7ca2c50c300000000000075000000000000000035a914fc95cb46ce2d0bec33babf6ef4b52ca54ac89133871c73706b71898baedc450653db251e6be40fc7ca2c50c3000000000000750c2700000000000017a914fc95cb46ce2d0bec33babf6ef4b52ca54ac891338700000000
    36102bf648463333b4c41a0a5d4888d0516a857a49424ddc9d44b1f3245d2bd3

TXID를 피드백한다。

  • 500개 AOC를 성공적으로 발송했는지 검사한다.

    showaddrbals 4a8u54or6cdyykcMP5Kbb7BNUUaW9fgkR6RuAY
    devruby: showaddrbals 4a8u54or6cdyykcMP5Kbb7BNUUaW9fgkR6RuAY
    [
      {
          "name" : "AOC",
          "assetref" : "9-299-51756",
          "qty" : 500
      },
      {
          "assetref" : "",
          "qty" : 99.96,
          "raw" : 9996
      }
    ]
    
    showaddrbals 1Ltnj5zUQFs7dtZymsVMxW4daPfGhGdiXLkxgc
    devruby: showaddrbals 1Ltnj5zUQFs7dtZymsVMxW4daPfGhGdiXLkxgc
    [
      {
          "name" : "AOC",
          "assetref" : "9-299-51756",
          "qty" : 500
      },
      {
          "assetref" : "",
          "qty" : 0,
          "raw" : 0
      }
    ]

데이터모쥴 창설 및 사례

데이터모쥴은 루비의 독특한 블록체인기술이고 루비 데이터모쥴이 정보화시스템과 Dapp에 토탈솔루션을 제공하는데 이는 참여자간의 자산이체가 아닌 일반적인 데이터검색, 타임스템프와 보관에 중심을 기울인다. 데이터모쥴을 데이터베이스의 표나 표중의 문자열이라고 이해하면 된다. 루비는 현재 2M인 개당 사무처리량 및 16M인 개당 블록처리량 기능을 지원하고 외부응용블록의 설계를 통해 초대형 데이터의 분산식 파편화저장을 지원하도록 한다. 데이터모쥴은 집약적인 온, 오프체인 혼합식 메모리를 지원한다. 개발자가 조작시스템의 데이터베이스처럼 데어터모쥴을 조작할 수 있고 또 기존 정보시스템이 블록체인에 신속하게 이전하도록 지원할 수 있다.

블록체인 구축

기존 정보시스템으로 개발한 조작시스템과 데이터베이스 구축과 비슷하고 테스트체인의 3단계 창설절차를 참조하기 바란다.

데이터모쥴 창설

기존 정보시스템이 개발한 설계와 표구조, 문자열과 비슷하다. DM1의 데이터모쥴을 창설하고 창설자가 이 데이터모쥴의 모든 작업어가를 가진다고 자동적으로 인정하며 true는 모든 자가 입력할 수 있다고 의미한다. 노드1에서

setupdatamod DM1 true
devruby: setupdatamod DM1 true
75630dcb2ba28f2cb460f249ec2707563e850431ce2aebe45d722681aad230c2

데이터모쥴에 데이터를 입력하기

기존 정보시스템이 개발한 데이터베이스에 데이터를 입력하기와 비슷하다. 노드1에서

senditem DM1 key01 646174616d6f64
senditem DM1 key02 '{"text":"hello world!"}'
devruby: setupdatamod DM1 true
75630dcb2ba28f2cb460f249ec2707563e850431ce2aebe45d722681aad230c2
devruby: senditem DM1 key01 646174616d6f64
e9483eea4aed839899241a373e991f153d3202f0a7762c613325d15579e43390
devruby: senditem DM1 key02 '{"text":"hello world!"}'
f2aa2ba406b0979b37540191140d3a6806bbf89540a0ea95937b13f131b10a90
txid를 피드백하고 데이터내용을 블록에 입력하였음。

데이터모쥴에서 데이터를 검색하기

기존 정보시스템이 개발한 데이터베이스에서 데이터를 검색하기와 비슷하다. 노드2에서 데이터모쥴을 검색한다:

showdatas
devruby: showdatas
[
    {
        "name" : "devroot",
        "setuptxid" : "026e05833bdce28ae8a094f8d81ca40d53184122a2359634d3405d2427e29913",
        "datamodref" : "0-0-0",
        "restrict" : {
            "write" : false,
            "inchain" : false,
            "outchain" : false
        },
        "details" : {
        },
        "ordered" : true,
        "synchronized" : true,
        "items" : 0,
        "confirmed" : 0,
        "keys" : 0,
        "senditemers" : 0
    },
    {
        "name" : "DM1",
        "setuptxid" : "75630dcb2ba28f2cb460f249ec2707563e850431ce2aebe45d722681aad230c2",
        "datamodref" : "129-300-25461",
        "restrict" : {
            "write" : false,
            "inchain" : false,
            "outchain" : false
        },
        "details" : {
        },
        "ordered" : false
    }
]

루비는 데이터저장에 있어서 사용자가 저장한다는 원칙을 적용한다. 전체 노드지갑에서 모든 블록(즉, 좌선체인메모리에 데이터모쥴 블록을 포함한다)을 저장하지만 구독하지 않을 경우 관련 데이터메모리를 구조화하지 않고 또 외부응용블록 데이터를 저장하지 않으며 구독할 경우에만 관련 데이터를 구조화하고 관련 외부응용블록을 동기화하며 지침을 좌선체인의 내부 응용블록내용에 가리키도록 함으로써 필요하지 않은 디스크공간을 낭비하지 않도록 한다. 노드2에서 위 데이터모쥴의 데이터내용을 구독하도록 한다

order DM1
showdataitems DM1
devruby: order DM1
devruby: showdataitems DM1
[
    {
        "senditemers" : [
            "1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr"
        ],
        "keys" : [
            "key01"
        ],
        "outchain" : false,
        "available" : true,
        "data" : "646174616d6f64",
        "confirmations" : 16,
        "blockhash" : "00675f202d1a329d80656f5e3e63a40497cf32706bc5edd7f26598997a810f62",
        "blockindex" : 2,
        "blocktime" : 1533556931,
        "txid" : "e9483eea4aed839899241a373e991f153d3202f0a7762c613325d15579e43390",
        "vout" : 0,
        "valid" : true,
        "time" : 1533556931,
        "timereceived" : 1533557402
    },
    {
        "senditemers" : [
            "1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr"
        ],
        "keys" : [
            "key02"
        ],
        "outchain" : false,
        "available" : true,
        "data" : {
            "text" : "hello world!"
        },
        "confirmations" : 15,
        "blockhash" : "0063528fa618d5dd0b700ab6019a84ceb6f3052c1a374c7e66575332a179e63e",
        "blockindex" : 1,
        "blocktime" : 1533556951,
        "txid" : "f2aa2ba406b0979b37540191140d3a6806bbf89540a0ea95937b13f131b10a90",
        "vout" : 0,
        "valid" : true,
        "time" : 1533556951,
        "timereceived" : 1533557402
    }
]

데이터목록 내용을 검색하는데 여러가지 방법이 있다. 데이터모쥴, 데이터목록 발송자, 키워크, 타임스템프 등 여러 방식을 통해 데이터를 조회할 수 있다. 루비는 데이터메모리에 구조화된 데이터저장방식을 적용하기 때문에 검색효율이 매우 높다.

showdatakeys DM1데이터모쥴의 관건적 색인을 표시
showdatakeyitems DM1 key01 key01를 키워드로 하는 목록을 표시
showdatasenders DM1DM1 데이터모쥴중의 데이터목록 발표자정보를 표시
showdatasenderitems DM1 ADDRESS DM1 데이터모쥴중의 주소 발표자가 발표한 구체넉인 목록을 표시

devruby: showdatakeys DM1
[
    {
        "key" : "key01",
        "items" : 1,
        "confirmed" : 1
    },
    {
        "key" : "key02",
        "items" : 1,
        "confirmed" : 1
    }
]
devruby: showdatakeyitems DM1 key01
[
    {
        "senditemers" : [
            "1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr"
        ],
        "keys" : [
            "key01"
        ],
        "outchain" : false,
        "available" : true,
        "data" : "646174616d6f64",
        "confirmations" : 26,
        "blockhash" : "00675f202d1a329d80656f5e3e63a40497cf32706bc5edd7f26598997a810f62",
        "blockindex" : 2,
        "blocktime" : 1533556931,
        "txid" : "e9483eea4aed839899241a373e991f153d3202f0a7762c613325d15579e43390",
        "vout" : 0,
        "valid" : true,
        "time" : 1533556931,
        "timereceived" : 1533557402
    }
]

devruby: showdatasenders DM1
[
    {
        "senditemer" : "1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr",
        "items" : 2,
        "confirmed" : 2
    }
]

devruby: showdatasenderitems DM1 1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr
[
    {
        "senditemers" : [
            "1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr"
        ],
        "keys" : [
            "key01"
        ],
        "outchain" : false,
        "available" : true,
        "data" : "646174616d6f64",
        "confirmations" : 29,
        "blocktime" : 1533556931,
        "txid" : "e9483eea4aed839899241a373e991f153d3202f0a7762c613325d15579e43390"
    },
    {
        "senditemers" : [
            "1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr"
        ],
        "keys" : [
            "key02"
        ],
        "outchain" : false,
        "available" : true,
        "data" : {
            "text" : "hello world!"
        },
        "confirmations" : 28,
        "blocktime" : 1533556951,
        "txid" : "f2aa2ba406b0979b37540191140d3a6806bbf89540a0ea95937b13f131b10a90"
    }
]

고급사용법 - JSON합병

입력

senditem DM1 key03 '{"json":{"name":"Xiao Ming","city":"Beijing"}}'
senditem DM1 key03 '{"json":{"city":"Shanghai"}}'
devruby: senditem DM1 key03 '{"json":{"name":"Xiao Ming","city":"Beijing"}}'
e1b288c2780fd9415b20da14c5f9fd93aed2033dce3ca73f1d17539602df98a8
devruby: senditem DM1 key03 '{"json":{"city":"Shanghai"}}'
2d22e0e1c252dfb0bebcd06173f8cb3fed7d475f3f9ac1b8e98c6db42df4904b

검색

showdatakeysumm DM1 key03 jsonobjectmerge,ignoreother
devruby: showdatakeysumm DM1 key03 jsonobjectmerge,ignoreother
{
    "json" : {
        "city" : "Shanghai",
        "name" : "Xiao Ming"
    }
}
devruby: showdataitems DM1
[
    {
        "senditemers" : [
            "1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr"
        ],
        "keys" : [
            "key01"
        ],
        "outchain" : false,
        "available" : true,
        "data" : "646174616d6f64",
        "confirmations" : 37,
        "blockhash" : "00675f202d1a329d80656f5e3e63a40497cf32706bc5edd7f26598997a810f62",
        "blockindex" : 2,
        "blocktime" : 1533556931,
        "txid" : "e9483eea4aed839899241a373e991f153d3202f0a7762c613325d15579e43390",
        "vout" : 0,
        "valid" : true,
        "time" : 1533556930,
        "timereceived" : 1533556930
    },
    {
        "senditemers" : [
            "1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr"
        ],
        "keys" : [
            "key02"
        ],
        "outchain" : false,
        "available" : true,
        "data" : {
            "text" : "hello world!"
        },
        "confirmations" : 36,
        "blockhash" : "0063528fa618d5dd0b700ab6019a84ceb6f3052c1a374c7e66575332a179e63e",
        "blockindex" : 1,
        "blocktime" : 1533556951,
        "txid" : "f2aa2ba406b0979b37540191140d3a6806bbf89540a0ea95937b13f131b10a90",
        "vout" : 0,
        "valid" : true,
        "time" : 1533556943,
        "timereceived" : 1533556943
    },
    {
        "senditemers" : [
            "1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr"
        ],
        "keys" : [
            "key03"
        ],
        "outchain" : false,
        "available" : true,
        "data" : {
            "json" : {
                "name" : "Xiao Ming",
                "city" : "Beijing"
            }
        },
        "confirmations" : 6,
        "blockhash" : "0086ceebeacaa7afd95cc28aaf33e194b417b139ba2590eb13bb4b51173c08bd",
        "blockindex" : 1,
        "blocktime" : 1533557892,
        "txid" : "e1b288c2780fd9415b20da14c5f9fd93aed2033dce3ca73f1d17539602df98a8",
        "vout" : 0,
        "valid" : true,
        "time" : 1533557870,
        "timereceived" : 1533557870
    },
    {
        "senditemers" : [
            "14rCRwYD4ttaZFfwWAMbo76tcNMDAQSPWaek4C"
        ],
        "keys" : [
            "key03"
        ],
        "outchain" : false,
        "available" : true,
        "data" : {
            "json" : {
                "city" : "Shanghai"
            }
        },
        "confirmations" : 6,
        "blockhash" : "0086ceebeacaa7afd95cc28aaf33e194b417b139ba2590eb13bb4b51173c08bd",
        "blockindex" : 2,
        "blocktime" : 1533557892,
        "txid" : "2d22e0e1c252dfb0bebcd06173f8cb3fed7d475f3f9ac1b8e98c6db42df4904b",
        "vout" : 0,
        "valid" : true,
        "time" : 1533557886,
        "timereceived" : 1533557886
    }
]
两个JSON项合并在一起,为每个键获取最新值。

외부응용블록 - 초대형 데이터메모리

노드1 : 먼저 초대형 데이터(외부으용블록)메모리의 데이터를 캐시에 입력

setupcache
devruby: setupcache
jGaCaP9sQXi

표시부호:jGaCaP9sQXi를 얻었음 파일을 캐시에 첨가 addcache명령으로 파일을 2진법 캐시에 첨가

addcache jGaCaP9sQXi file /Users/xia0fan/test.jpg
devruby: addcache jGaCaP9sQXi file /home/xia0fan/test.jpg
956303

파일크기:956303를 피드백한다. 그 다음에 캐시에 있는 파일을 블록체인에 발표한다

senditem DM1 key04 '{"cache":" jGaCaP9sQXi"}' outchain
devruby: senditem DM1 key04 '{"cache":"jGaCaP9sQXi"}' outchain
ae62e5985458d7701a1ec09acdf345b1d75110237dcf5ab312abcff5f89fd0a4
TXID를 피드백한다
ae62e5985458d7701a1ec09acdf345b1d75110237dcf5ab312abcff5f89fd0a4

노드2 : 외부응용블록의 데이터를 조회하도록 한다

showdatakeyitems DM1 key04
devruby: showdatakeyitems DM1 key04
[
    {
        "senditemers" : [
            "1X9MeHmcW3S9RVMV571G86PQVsCAQ7xYX6AeFr"
        ],
        "keys" : [
            "key04"
        ],
        "outchain" : true,
        "available" : true,
        "data" : {
            "txid" : "ae62e5985458d7701a1ec09acdf345b1d75110237dcf5ab312abcff5f89fd0a4",
            "vout" : 0,
            "format" : "raw",
            "size" : 956303
        },
        "confirmations" : 2,
        "blockhash" : "0067e2b5425adb8fd09f1fcb7fae2f540a460bf59181b0834a30ab7a58163e50",
        "blockindex" : 1,
        "blocktime" : 1533558603,
        "txid" : "ae62e5985458d7701a1ec09acdf345b1d75110237dcf5ab312abcff5f89fd0a4",
        "vout" : 0,
        "valid" : true,
        "time" : 1533558597,
        "timereceived" : 1533558597
    }
]

표시된 신규항목을 볼 수 있다. 데이터"available" : false인 경우 외부응용블록이 아직 동기화되지 않는다고 의미하고 이 때 동기화대열을 조회할 수 있다

showappblockq
devruby: showappblockq
{
    "appblocks" : {
        "waiting" : 0,
        "querying" : 0,
        "retrieving" : 0
    },
    "bytes" : {
        "waiting" : 0,
        "querying" : 0,
        "retrieving" : 0
    }
}

만약 블록대열에 비여있으면 항목의 데이터가 사용 가능하다고 의미하고 이 경우에 16진법으로 내용을 조회할 수 있다:

showtxoutdata ae62e5985458d7701a1ec09acdf345b1d75110237dcf5ab312abcff5f89fd0a4 0 512
devruby: showtxoutdata ae62e5985458d7701a1ec09acdf345b1d75110237dcf5ab312abcff5f89fd0a4 0 512
ffd8ffe000104a46494600010101004800480000ffe12da04578696600004d4d002a000000080009010f00020000000a0000007a011000020000001100000084011a00050000000100000096011b0005000000010000009e0128000300000001000200000132000200000014000000a60213000300000001000100008769000400000001000000ba8825000400000001000002b60000032e536d6172746973616e00536d6172746973616e2055322050726f000000000048000000010000004800000001323031373a30373a31372031313a33363a353000001d829a0005000000010000021c829d0005000000010000022488220003000000010002000088270003000000010064000090000007000000043032323090030002000000140000022c9004000200000014000002409101000700000004010203009201000a000000010000025492020005000000010000025c9203000a00000001000002649204000a000000010000026c920700030000000100020000920900030000000100100000920a0005000000010000027492900002000000070000027c92910002000000070000028492920002000000070000028ca00000070000000430313030a00100030000000100010000a00200040000000100001040a00300040000000100000c30a00500040000000100000294a21700030000000100020000a30100070000

장면화 스마트계약 참조

루비 장면화 스마트계약은 우리가 스마트계약2.0이라고 부르고 개발자에게 충분한 자유도를 부여하며 개발자가 자기가 잘 아는 프로그래밍언어로 개발할 수 있고 루비에서 체인과 교환하는 스마트계약입구를 제공한다. 루비에서 대외적으로 제공하는 체인과 교환하는 스마트계약은 주로 JSON API를 통해 제공하고 모든 API가 체인과 데이터를 교환하는 방법으로 사용할 수 있다. 또한 루비는 개발자가 Dapp를 높은 효율로 개발할 수 있도록 별도로 관건적인 2가지 방법인 계약자산 창설방법과 데이터모쥴 창설방법을 제공한다. 위 2가지 방법을 호출할 때 대량적인 RUB가 필요하다. 개발자가 Dapp를 개발할 때 루비개발테스트버전을 다운로드하여 개발하거나 해당 자산과 데이터모쥴을 신청하여 테스트체인에서 개발할 수 있다. 개발 완료한 후 루비 메인넷에 이식할 수 있다. 이하에 일부 장면화 스마트계약을 참조로 제시한다.

가상화폐융자 스마트계약 참조

주요목표 : 자동화된 화폐환전을 설치하여 가상화폐융자 스마트계약의 기반층기술구조를 실현한다. 장명설명 : 융자하고자 하는 자산을 창설한다. (가상화폐코드 : FBC, 최소단위 0.01, 발행총수량 10000000, 융자금액 5000000, 500 RUB(시스템의 기존자산이나 원생화폐)와 환전)

  • 노드서버에 주소를 신규 창설하기

    addnewaddr 주소를 얻었음A2
  • 관리주소A1에서 A2에 10000000개 최소단위 0.01이고 다시 추가하지 못하는 FBC를 발송한다.

    sellfrom A1 A2 '{"name":"FBC","open":false}' 10000000 0.01 0.01 '{"Build":"CN", "Index":"01", "for":"OfferCoin"}'
    TXID를 피드백한다
    신규자산 발행상황 조회한다
    showassets FBC
  • 가상화폐융자 화폐간 환전 계약을 발기한다

    이제 신규거래를 창설하자.
    
    prelockfrom A2 '{"FBC":5000000}'
    
    txid를 얻었음:TXID1
    vout를 얻었음:VOUT1
    
    화폐간 환전거래를 구축하여 우리가 500 RUB(기반층코드"")로5000000개 FBC를 환전하라고 지정한다:
    
    setuprawex TXID1 VOUT1 '{"":500}'
    
    16진법블록인 HEX1를 입력하고 이 HEX1를 체인 내부 데이터모쥴을 통해 모든 노드에 자동적으로 발송하도록 하거나 오프라인상태에서 참여자에게 발송할 수 있다.
  • 참여자1이 환전에 참여한다

    prelockfrom 1-address '{"":100}'
    
    txid를 얻었음:TXID2
    vout를 얻었음:VOUT2
    
    현재 우리는 위 100 YQT라는 오퍼를 거래에 추가하여 원시 오퍼비례로 1000000FBC를 환전해달라고 요청한다:
    
    addrawex HEX1 TXID2 VOUT2 '{"FBC":1000000}'
    
    16진법 HEX2출력하여 complete : false인 경우 교환이 아직 균형을 이루지 못한다고 의미한다. 이 때 거래에서 어떤 자산이 아직 제공되거나 요청되고 있는지 조회한다:
    
    decoderawex HEX2
    
    이는 4000000 FBC의 오퍼와 400 RUB의 요청이 남아있다고 의미한다. 보다 상세한 세목사항이 다음과 같다:
    
    decoderawex HEX2 true
    
    위 exchanges문자열은 모든 개인의 offer 및 ask단계의 교환거래를 표시하고 옆의 address가 참여한다.
  • 현재 참여자2가 환전에 계속 참여한다:

    prelockfrom 2-address '{"":200}'
    
    txid를 얻었음:TXID3
    vout를 얻었음:VOUT3
    
    addrawex HEX2 TXID3 VOUT3 '{"FBC":2000000}' 
    
    가장 긴 16진법 HEX3을 출력한다
  • 参与者3继续参与兑换

    prelockfrom 3-address '{"":200}'
    
    txid를 얻었음:TXID4
    vout를 얻었음:VOUT4
    
    completerawex HEX3 TXID4 VOUT4 '{"FBC":2000000}' 4322074fdf6872d65652077617973
    
    16진법 HEX4를 출력하여 방송으로 확인할 수 있다:
    
    sendrawdeal HEX4
    
    여기까지 가상화폐융자의 전과정을 완료하였다.

판권보호용 스마트계약

창작과정

대칭적 암호화, 체인에 입력하기

완성품 암호화저장

1/n 다중사인 불할분배

게임장면용 스마트계약

야웅이키우기를 예시로

야웅이 생성

주소를 창설하기
해당 데이터모쥴을 생성하여 야웅이 특성을 기록한다

야웅이 기르기

화폐간 거래 과정을 데이터모쥴에 기입한다

후손번식

데이터모쥴 특성을 겹쳐서 새 양웅이 데이터모쥴에 기입한다

거래소매칭 안내

루비에 2가지 주요 자산이 있는데 하나는 원생자산인 RUB이고 공감(광부채광)으로부터 생성되며 다른 하나는 분할 발행하는 계약디지털자산이고 루비를 통해 발행하는 모든 디지털자산이다. 거래소와 매칭할 때 주로 위 2가지 자산의 충전, 인출 등 작업을 처리한다. 거래소를 배치할 때 rubyz와 rubyi를 포함한 핵심프로그램을 다운로드하여 사용하여야 한다.

프로그램 시작

./rubyz ruby 실행 후 루비블록을 자동적으로 동기화시키면서 RPC서비스를 자동적으로 실행한다

충전주소 창설

거래소에 온라인 지갑관리사용자 충전주소를 창설하여야 한다. 지갑은 계좌(공용 키와 프라이빗 키를 포함)와 주소 등 정보를 저장하는데 사용하고 사용자가 자산을 소유한다고 증명하는 가장 중요한 증빙이므로 지갑파일과 암호를 반드시 잘 보관하여야 하고 분실하거나 누설하여서는 안된다. 콜드지갑(오프라인 지갑)을 보다 안전적인 저장방식으로 택할 수 있다. 한 지갑에 여러 주소를 저장할 수 있고 거래소에서 사용자마다 충전주소를 생성해준 후 생성된 주소를 데이터베이스에 도입하여 충전주소로 사용자에게 분배한다.

충전주소 생성

충전주소는 2가지 생성방식이 있다:

  • 방법1 : 지갑에 루비주소를 동태적으로 창설한다

    주소를 동태적으로 창설하려면 API의 addnewaddr로 실현할 수 있다. 이 때 프로그램에서 창설된 주소를 피드백하여 지갑파일에 추가한다.
  • 방법2 : 지갑주소를 미리 창설한다

    주소를 미리 창설하려면 API의setupkeypairs로 실현할 수 있다. 이 때 importaddr를 통해 지갑을 도입하여 모니터링에 추가한다.

거래소가 방법2를 적용하는 것을 권장한다. 이렇게 하면 지갑에 대한 외부작업을 줄일 수 있어 지갑의 안정적인 실행 및 편리한 관리에 유리하고 또한 프라이빗 키를 지갑에 저장하지 않으므로 상대적으로 안전하다.

지갑주소를 창설하고 주소를 모니터링하기

  • 주소를 창설하기 : setupkeypairs 1000 1000개 주소를 창설한다.

  • 주소를 지갑에 도입하기 : importaddr '["ADDR1","ADDR2","ADDR3"]' false(신규 주소를 도입할 때 false로 하면 기존 블록을 스캔하지 않아 도입속도를 높인다)

  • 기타 관련 명령어:

    단일주소 잔액 조회:showaddrbals ADDR
    모든 주소(모니터링주소를 포함) 잔액 조회:showallbals * * 1 true
    주소거래내역 조회showaddrdeals ADDR

생성된 주소를 데이터베이스에 도입하기

거래매칭프로그램 개발

사용자 충전기능 개발

자산충전기능개발에 주로 다음과 같은 내용을 포함한다:

블록생성수량을 모니터링한다
새 블록이 생성한 후 블록중의 정보를 조회한다.
거래정보에 따라 사용자충전을 완성하여 관련 거래기록을 저장한다.
모니터링블록 생성
showchain blocks=heads 블록이 동시에 완성했다고 표시한다

ruby: showchain
{
"blocks" : 313,
"headers" : 313,
"bestblockhash" : "006aff5ef148020994f6b68d42567f2a94e5d270d83e0c8318e5b018e52eb1c5"
}    
블록정보 확보하기

루비API중의 showblock hash|height 4방법은 블록정보를 확보하는 기능을 제공하고 이 방법중의 height가 블록높이이다. (type)를 4로 설정하여 거래를 포함한 상세한 정보를 JSON양식의 문자열로 피드백한다. 이하에 블록거래부분(TX)의 피드백정보이다. 거래소는 매개 TX중의 VOUT부분을 해독하여야 하고 주로 value와 asset 문자열에 초점을 맞춘다. Value는 발송한 원생자산이고 asset은 창설한 자산이다. Asset에 자산명(Name), 발송수량(QTY) 등을 포함한다. 관련 거래vout의 scriptPubKey에 접수한 데이터의 주소를 포함하고 거래소에서 이 주소를 현지 데이터베이스와 비교하도록 할 수 있으며 만약 이 계좌에 발송한다고 발견하면 시스템에서 사용자에게 충전해준다고 의미한다.

devruby: showblock 313 4
{
"tx": [

    {
        "txid": "fbe58cb4633a57f7dfddd80a787738f60f99fa51eb81cc8bd78bc5680e3ba1de",
        "version": 1,
        "locktime": 0,
        "vin": [{
            "txid": "c8ec2f532614ea01d93f8222af04e16c4b699ab8f72fecb38a3809a429eac8a6",
            "vout": 0,
            "scriptSig": {
                "asm": "304402206d3d65674604f6cc47faabc35604d2d78646cd55620ee6e14828ac75aac66f720220535cc7bbbc69fca074126bfd575d9664686c40d6070e7b870d486d1647b68f6d01 03df48503d53fb62983d996134c68ed710e0f41c1fb3b17a604e2674d234c3f0db",
                "hex": "47304402206d3d65674604f6cc47faabc35604d2d78646cd55620ee6e14828ac75aac66f720220535cc7bbbc69fca074126bfd575d9664686c40d6070e7b870d486d1647b68f6d012103df48503d53fb62983d996134c68ed710e0f41c1fb3b17a604e2674d234c3f0db"
            },
            "sequence": 4294967295
        }],
        "vout": [{
                "value": 220,
                "n": 0,
                "scriptPubKey": {
                    "asm": "OP_DUP OP_HASH160 8a2231f19691d887885fe19dc1e4c591dda89ff0 OP_EQUALVERIFY OP_CHECKSIG",
                    "hex": "76a9148a2231f19691d887885fe19dc1e4c591dda89ff088ac",
                    "reqSigs": 1,
                    "type": "pubkeyhash",
                    "addresses": [
                        "1DbPDPaYxRpdh4XqUrqpoHgDN66W11ekcX"
                    ]
                }
            },
            {
                "value": 250,
                "n": 1,
                "scriptPubKey": {
                    "asm": "OP_DUP OP_HASH160 e09b58166fa4f29ad6da5c2f6a78ebc6d5d0ac13 OP_EQUALVERIFY OP_CHECKSIG",
                    "hex": "76a914e09b58166fa4f29ad6da5c2f6a78ebc6d5d0ac1388ac",
                    "reqSigs": 1,
                    "type": "pubkeyhash",
                    "addresses": [
                        "1MUcTU5E2Dg2z5W4H4TPAPPwuuyPTZ1Fca"
                    ]
                }
            },
            {
                "value": 54849226,
                "n": 2,
                "scriptPubKey": {
                    "asm": "OP_DUP OP_HASH160 f56f0b58aa5116b525450527d9618480c25fb730 OP_EQUALVERIFY OP_CHECKSIG",
                    "hex": "76a914f56f0b58aa5116b525450527d9618480c25fb73088ac",
                    "reqSigs": 1,
                    "type": "pubkeyhash",
                    "addresses": [
                        "1PNjaVc5DVJzbNfcubxwLiSNwHtYXz8E2u"
                    ]
                }
            }
        ],
        "hex": "0100000001a6c8ea29a409388ab3ec2ff7b89a694b6ce104af22823fd901ea1426532fecc8000000006a47304402206d3d65674604f6cc47faabc35604d2d78646cd55620ee6e14828ac75aac66f720220535cc7bbbc69fca074126bfd575d9664686c40d6070e7b870d486d1647b68f6d012103df48503d53fb62983d996134c68ed710e0f41c1fb3b17a604e2674d234c3f0dbffffffff0300ef1c0d000000001976a9148a2231f19691d887885fe19dc1e4c591dda89ff088ac80b2e60e000000001976a914e09b58166fa4f29ad6da5c2f6a78ebc6d5d0ac1388ac7408b194e23100001976a914f56f0b58aa5116b525450527d9618480c25fb73088ac00000000"
    },

    {
        "txid": "669657d91f8e73702e09403f9281d4d13e539a84f90755e1ccef98f16c671af5",
        "version": 1,
        "locktime": 0,
        "vin": [{
                "txid": "765c9f66442c786ab32cab1551455665ba4263326e631c05c5256afe8ccb12ba",
                "vout": 0,
                "scriptSig": {
                    "asm": "3045022100ca87ab8cd21cb1fbe1978da81613e677330b17ed98436af56b62033728fa8c1702201020f1689a0000afb1814858c2541df9878690d99c6a874326b48a1b06f5cd1a01 035082268bb4df7dfce176ab0203db3d9db66aa2ca132b007e3dbd12e81a8f1141",
                    "hex": "483045022100ca87ab8cd21cb1fbe1978da81613e677330b17ed98436af56b62033728fa8c1702201020f1689a0000afb1814858c2541df9878690d99c6a874326b48a1b06f5cd1a0121035082268bb4df7dfce176ab0203db3d9db66aa2ca132b007e3dbd12e81a8f1141"
                },
                "sequence": 4294967295
            },
            {
                "txid": "765c9f66442c786ab32cab1551455665ba4263326e631c05c5256afe8ccb12ba",
                "vout": 2,
                "scriptSig": {
                    "asm": "30450221009c6d3346b0c51e2d3d99d3ced624ef019d10554aed58dd81bc6f378b683282bb022053340bd45f49f31a30ff6884cacf122dd4614b4995c6156c343adf9c7e760a6001 035082268bb4df7dfce176ab0203db3d9db66aa2ca132b007e3dbd12e81a8f1141",
"hex": "4830450221009c6d3346b0c51e2d3d99d3ced624ef019d10554aed58dd81bc6f378b683282bb022053340bd45f49f31a30ff6884cacf122dd4614b4995c6156c343adf9c7e760a600121035082268bb4df7dfce176ab0203db3d9db66aa2ca132b007e3dbd12e81a8f1141"
                },
                "sequence": 4294967295
            }
        ],
        "vout": [{
            "value": 0,
            "n": 0,
            "scriptPubKey": {
                "asm": "OP_DUP OP_HASH160 d6fb7300727ec9d693c4fec4efc9303a366f3c0c OP_EQUALVERIFY OP_CHECKSIG 73706b716556455115ab2cb36a782c44669f5c76e02e000000000000 OP_DROP",
                "hex": "76a914d6fb7300727ec9d693c4fec4efc9303a366f3c0c88ac1c73706b716556455115ab2cb36a782c44669f5c76e02e00000000000075",
                "reqSigs": 1,
                "type": "pubkeyhash",
                "addresses": [
                    "1Lbiq3uqeijKFKKjFJrv5BCWLJyeL15J5P"
                ]
            },
            "assets": [{
                "name": "WWW",
                "selltxid": "765c9f66442c786ab32cab1551455665ba4263326e631c05c5256afe8ccb12ba",
                "assetref": "5-299-23670",
                "qty": 120,
                "raw": 12000,
                "type": "transfer"
            }]
        }],
        "hex": "0100000002ba12cb8cfe6a25c5051c636e326342ba6556455115ab2cb36a782c44669f5c76000000006b483045022100ca87ab8cd21cb1fbe1978da81613e677330b17ed98436af56b62033728fa8c1702201020f1689a0000afb1814858c2541df9878690d99c6a874326b48a1b06f5cd1a0121035082268bb4df7dfce176ab0203db3d9db66aa2ca132b007e3dbd12e81a8f1141ffffffffba12cb8cfe6a25c5051c636e326342ba6556455115ab2cb36a782c44669f5c76020000006b4830450221009c6d3346b0c51e2d3d99d3ced624ef019d10554aed58dd81bc6f378b683282bb022053340bd45f49f31a30ff6884cacf122dd4614b4995c6156c343adf9c7e760a600121035082268bb4df7dfce176ab0203db3d9db66aa2ca132b007e3dbd12e81a8f1141ffffffff0300000000000000003776a914d6fb7300727ec9d693c4fec4efc9303a366f3c0c88ac1c73706b716556455115ab2cb36a782c44669f5c76e02e0000000000007500000000000000003776a914ebfe79b7b7fb9d4fec91971af9f7a7d209985bcd88ac1c73706b716556455115ab2cb36a782c44669f5c7660130f000000000075ba0e1602000000001976a914ebfe79b7b7fb9d4fec91971af9f7a7d209985bcd88ac00000000"
    }
]
}
블록거래에 의해 충전완료를 기록하기

거래소는 자신과 관련된 모든 거래를 사용자충전의 거래기록으로 기록하여야 한다. 거래출력에 거래소 소속 주소가 들어있다고 발견하면 데이터베이스중 그 충전주소에 해당한 사용자잔액을 수정하여야 한다. 안전성을 감안하여 거래소가 매일 정해진 시간에 수령한 원생자산과 디지털자산을 하나 혹은 여러 집합주소에 발송하는 것을 권장한다. 집합주소의 프라이빗 키는 서버에 직접 보관하지 않는다.

사용자 현금인출기능 개발

사용자가 금액을 인출할 경우 거래소가 다음 작업을 완성하여야 한다:

  • 사용자가 금액을 인출하기, 사용자계좌잔액 수정하기, (옵션)콜센터에서 금액인출요청을 처리하기를 기록한다. 거래소에서 금액인출을 즉시 심사하여 발송하거나 T+1입금으로 설계할 수 있다. T+1입금인 경우 일괄처리할 수 있으므로 수수료를 절감할 수 있다.

  • 블록체인의 확인을 기다리고 확인되면 금액인출기록을 금액인출성공으로 표시한다. 충전 시 블록체인에 대한 모니터링과 비슷하게 금액인출도 마찬가지로 모니터링 시 블록중의 어느 거래ID가 금액인출기록중의 거래ID와 동일하다고 발견하면 그 거래가 바로 확인되고 즉 금액인출이 성공했다고 확인된다.

    (1)사용자 금액인출요청을 처리하기

    사용자가 금액을 인출하기, 사용자계좌잔액 수정하기, (옵션)콜센터에서 금액인출요청을 처리하기를 기록한다는 절차가 블록체인조작과 무관하다.

    (2)사용자에게 금액인출자산을 발송하기

    자산을 집합하지 않는다면 거스름돈 반환방식을 지정하여 자산을 인출하여야 한다는 점의 주의하기 바란다.
  • 아래 3가지 방식으로 사용자 금액인출을 처리할 수 있다.

    • 일반발송방식은 send와 sendfrom을 통한 발송방법이고 이 방법은 1대1, 1대다 방식을 지원한다.
    • 고급방송방식1 : setuprawdeal를 통한 발송방법. 이 방법은 다대다 방식을 지원하고 이 때 반드시 addrawchange방법으로 거스름돈 반환주소를 지정하여야 하며 아니면 잔액을 잃어버릴 수 있다.
    • 고급발송방식2 : setuprawsendfrom를 통한 발송방법. 이 방법은 오프라인 사인방식으로 발송하기를 지원한다.

거스름돈 거래명령 지정하기

거래소에서 충전주소에 인출조작(충전을 집합하거나 집합하지 않은 사용자의 금액인출)을 실행할 시 아래 방식으로 거스름돈 반환주소를 지정하여야 하고 아니면 충전기록에 대한 모니터링에 영향을 끼칠 수 있어 각별히 주의하여야 한다.

  • 소비하지 않은 출력을 찾아내기

    ruby: showunspent
    [
      {
          "txid" : "5a17f8bfe106cc4c60cab3aedc35ab8d6ab07408364d40b9347e93a8417133d4",
          "vout" : 0,
          "address" : "18sTiipTkWobvhG1E6PQezP2u1LLDDUsi4",
          "account" : "",
          "scriptPubKey" : "76a9145653fb9555b9b5584c6d60d927d2f5dca50ed6b888ac1c73706b712ae51f7954ab5ef941532a6389fd7a31204e00000000000075",
          "amount" : 100,
          "confirmations" : 1,
          "cansend" : true,
          "spendable" : true,
          "assets" : [
              {
                  "name" : "X",
                  "assetref" : "193-301-31281",
                  "qty" : 200
              }
          ]
      }
    ]
  • 소비되지 않은 출력을 합병하여 HEX1를 형성한다

    금액인출할 txid와 vout를 찾아내어 목표주소와 수량을 지정한다
    
    setuprawdeal "[{\"txid\":\"5a17f8bfe106cc4c60cab3aedc35ab8d6ab07408364d40b9347e93a8417133d4\",\"vout\":0}]" "{\"1KqGRKjgtkv4r7yKffJoXhgiD8tpkZYygC\":0.1,\"X\":200}" 
  • HEX1에 의해 거스름돈 반환주소를 설치하여HEX2를 형성한다

    addrawchange HEX1 1KqGRKjgtkv4r7yKffJoXhgiD8tpkZYygC
    
    (원생화폐의 충전집합을 진행할 경우 setuprawedal값을 0.1로 설정할 수 있고 거스름돈 반환주소는 여전히 집합목표주소로 하며 이런 방식으로 수수료를 자동적으로 공제하여 모두 발송할 수 있다. 만약 원생화폐의 집합하지 않은 금액인출인 경우 충전주소가 아닌 거스름돈 반환주소를 지정한다)
  • signrawdeal

    signrawdeal HEX2 사인    프라이빗 키는 지갑에 있음
    singrawdeal HEX2 '[]' '["privatekey"]' 프라이빗 키는 지갑에 있음
  • sendrawdeal HEX2를 루비네트워크에 발송하여 거래발송을 완성한다

거스름돈 반환주소를 지정하는 목적은 충전주소가 외부로 자산을 이체할 시 본 주소로 자동적으로 거스름돈을 반환할 경우 시스템에서 이를 사용자충전이라고 착각하는 것을 방지하기 위해서이다. 거래소에서 충전하는 unspent에 대해 집합할 시 원생자산을 발송하는 수량을 0.1로 설정하고 거스름돈 반환주소를 여전히 집합주소로 설정할 경우 기반층 체인에서 0.1를 제외한 나머지 수량을 수수료를 공제하여 모두 집합주소에 이체함으로써 수수료를 거래비용에서 공제하도록 한다. 만약 집합하지 않은unspent가 직접 금액인출할 경우 addchange에 충전주소가 아닌 주소를 거스름돈 반환주소로 설치하여야 한다. 집합주소에 대해 인출조작을 실행할 경우 기타 발송방식을 사용할 수 있고 이 때 거스름돈을 자동적으로 반환한다. 시스템에서 집합주소를 모니터링하지 않으므로 위 조작이 안전하고 믿음직하다.

기타 주의사항

  • 거래소에서 충전 완료한 집합주소로 금액인출을 실행하기 원장하고 충전주소로 금액을 인출할 때 거스름돈 반환조작으로 인해 시스템이 사용자에게 잔액을 추가해주는 오작동을 초래할 수 있기 때문이다. 집합주소로 외부에 안전하게 이체할 수 있고 거스름돈 잔액이 충전기록에 대한 모니터링에 영향을 미치지 않을 것이다.

  • 프라이빗 키를 가진 집합주소 지갑은 특정 오프라인 서버에 보관할 수 있고 이 서버는 오직 금액인출시에만 네트워크와 연결한다.

  • 집합주소 발송은 또한 오프라인 사인방식을 적용할 수 있고 거래를 창설한 후 프라이빗 키로 사인하여 거래를 발송한다.

  • 거래소는 공동관리 계약계좌방식으로 관련 금액인출 자산을 처리할 수 있다.

  • 권장한 전체 프로세스는 다음과 같다:

    단계1 : 환경준비
      명령줄 지갑을 다운로드하기, 구체적으로 : https://github.com/rubychainnet/ruby를 참조
        서버가 노드를 실행하여 블록 동기화 완료할 때까지 기다린다.
          rubyz ruby
        노드를 닫는다
          rubyi ruby stop
        환경설정파일을 수정하여 실행환경을 설치한다:
              mac/linux 수정~/.ruby/ruby/ruby.conf
              windows 수정 %APPDATA%\RUby\ruby\ruby.conf
              자동적으로 UTXO에 집합하여 충전기록검측에 영향을 미치지 않기 위해 다음 파라미터를 추가한다
              integminconf=999999999
          노드를 다시 실행한다
            rubyz ruby
    
    단계2 : 충전
      주소를 생성한다:setupkeypairs 1000
      주소를 서버지갑(프라이빗 키를 포함하지 않음)에 도입한다:importaddr [addr1,addr2,…]
    
      사용자가 충전배치를 신청할 수 있도록 주소리스트를 데이터베이스에 입력한다
      블록 및 충전기록을 모니터링한다:showchain ——> showblock height 4
      충전기록을 처리하여 데이터베이스중의 사용자잔액과 거래기록을 수정한다
    
    단계 3 : 자산집합
      사용자잔액을 집합하여 자금을 집합계좌(기타 비서버노드, 사용자 충전주소의 프라이빗 키를 포함, 다중사인계좌를 권장)에 집중하여 관리한다
      showunspent——>setuprawdeal——>addrawchange(비사용자 충전주소를 거스름돈 반환주소로 설치하기 권장)——>signrawdeal(사인)——>sendrawdeal
    
    단계 4 : 금액인출
      사용자가 금액인출을 신청하여 데이터베이스 관련 기록을 수정한다.
      (옵션)콜센터 심사
      집합 다중사인계좌의 지급:send/sendfrom/setuprawsendfrom(오프라인 사인)
      블록 및 거래기록을 모니터링한다:showchain——>showaddrdeal/showaddrdeals
      금액인출 성공
    
    각별히 주의하셔야 하는 사항:
     루비지갑 고객단말은 안전성을 보장하기 위해 암호를 입력하지 않은 경우 블록 동기화를 진행하지 않고 또한 루비의 디폴트 설정값은 거래소의 서비스노드에 사용자 프라이빗 키를 보관하지 않는다고 인지하므로 거래소 서비스노드에 지갑암호를 설치할 필요가 없다. 만약 거래소 노드에 지갑암호를 설치할 경우 블록을 동기화하기 위해 정기적으로 암호를 입력하여야 한다.
     루비는 블록의 제한없는 팽장을 막기 위해 일정한 시간 내 거래가 없으면 50개 빈 거래블록이 생성한 후 블록의 성장을 중지하고 신규 거래가 나타나면 다시 블록을 생성하도록 한다.
     현재 루비는 대외적으로 3개 블록체인네트워크를 제공하는데 각각 ruby(메인넷port=7113,rpcport=7112),testruby(테스트체인port=6113,rpcport=6112),devruby(개발 테스트체인port=5113,rpcport=5112)이고 위 3가지 블록체인 네트워크의 주소양식이 똑같이 RU20 주소양식을 적용하므로 개발할 때 주소양식 전환문제를 고려하지 않아도 된다. 해당 블록체인 노드를 구축한 후 실행방식은 각각 다음과 같다. 
         rubyz ruby   
         rubyz testruby   
         rubyz devruby 
     CLI 관리방식은 다음과 같다.
         rubyi ruby
         rubyi testruby
         rubyi devruby