Develop with pleasure!

福岡でCloudとかBlockchainとか。

Colorcoreを使ったアセットの送付

Open Asset Protocolに対応したウォレットOpenAssets/colorcore · GitHub
を使ってアセットを送付してみる。

アセットの生成

colorcoreを使ってアセットを生成する。

$ python3 colorcore.py issueasset akXDPMMHHBrUrd1fM756M1GSB8viVAwMyBk 100

↑でOpen Asset Address "akXDPMMHHBrUrd1fM756M1GSB8viVAwMyBk"に対して100 個のアセットが生成される。

しばらくしてgetbalanceでデータを確認すると

$ python3 colorcore.py getbalance
[
    {
        "assets": [
            {
                "asset_id": "AWo3R89p5REmoSyMWB8AeUmud8456bRxZL",
                "quantity": "100"
            }
        ],
        "value": "0.00990000",
        "address": "1MFW7BTwiNbAkmVz4SzAMQXboKYKGSzkq2",
        "oa_address": "akXDPMMHHBrUrd1fM756M1GSB8viVAwMyBk"
    }
]

生成されたアセットが確認できる。asset IDは明示的に指定することなく、"akXDPMMHHBrUrd1fM756M1GSB8viVAwMyBk"が持つPublicKeyから算出される。

アセットの送付

続いてアセットを送付してみる。アセットを送付する際には送付先のアドレスがBitcoinを持っていないとエラーになる。そのため事前にbitcoin-cliのsendtoaddressコマンドとかで送付先のアドレスにもBitcoinを送っておく。(colorcoreにもsendbitcoinコマンドがあるけど、これだと整数値しか送れないので、最低でも1BTCからの送付になる。sendbitcoinで送る量の単位がsatoshiなので整数でOK。)

準備ができたら↓のコマンド実行してアセットを送付する。
(sendasset アセット送付元のOAアドレス 送付するasset ID assetの量 送付先のOAアドレス)

$ python3 colorcore.py sendasset akXDPMMHHBrUrd1fM756M1GSB8viVAwMyBk AWo3R89p5REmoSyMWB8AeUmud8456bRxZL 1 akTfC7D825Cse4NvFiLCy7vr3B6x2Mpq8t6 

ちなみに送付が可能なのは、指定したasset IDの秘密鍵を持っている場合のみ。ブロックチェーン上には明示的にasset IDは管理されておらず、そのアセットのasset IDが何なのかはそのアセットを発行したトランザクションまで遡って、PublicKeyから算出される。そのため、取引の途中でasset IDが改変されることはなく、必ずアセットを発行した秘密鍵を持っているユーザしか同一のアセットは発行できないということになる。

asset IDの生成手順は↓techmedia-think.hatenablog.com

しばらくしてブロックチェーンにデータが追加されると↓のように送付したアセットが確認できるようになる。

$ python3 colorcore.py getbalance
[
    {
        "oa_address": "akTfC7D825Cse4NvFiLCy7vr3B6x2Mpq8t6",
        "assets": [
            {
                "quantity": "1",
                "asset_id": "AWo3R89p5REmoSyMWB8AeUmud8456bRxZL"
            }
        ],
        "address": "1HhJs3JgbiyxC8ktfi6nU4wTqVmrMtCVkG",
        "value": "0.00070000"
    },
    {
        "oa_address": "akXDPMMHHBrUrd1fM756M1GSB8viVAwMyBk",
        "assets": [
            {
                "quantity": "99",
                "asset_id": "AWo3R89p5REmoSyMWB8AeUmud8456bRxZL"
            }
        ],
        "address": "1MFW7BTwiNbAkmVz4SzAMQXboKYKGSzkq2",
        "value": "0.00458200"
    }
]