C++
JavaScript
スマートコントラクト
solidity
ブロックチェーン

IOSTプラットフォームのスマートコントラクトは Javascript をサポートしています。

前提条件

IOST 開発環境 設定&インストール

HelloWorld

1 - HelloWorldプログラムの作成 viエディタで新規プログラムを作成します。

# vi helloworld.js

次のようにコードを入力します。iを押すと入力モードになります。もし、操作がわからなくなったら、一度ESCキーで編集モードを抜けてから、再度iを押してください。

class HelloWorld {
    init() {}
        hello(someone) {
        return "hello, "+ someone
    }
}

module.exports = HelloWorld;

ABIファイルを作成します。

# vi helloworld.abi
{
  "lang": "javascript",
  "version": "1.0.0",
  "abi": [
    {
      "name": "hello",
      "args": [
        "string"
      ]
    }
  ]
}

2 - HelloWorldプログラムのパブリッシュ

root@1b4f568854fb:/workdir# ./iwallet  --expiration 10000 --gas_limit 1000000 --gas_ratio 1  --server localhost:30002  --account admin  --amount_limit '*:unlimited'  publish helloworld.js helloworld.abi
sending tx
time:1547082154089187348 expiration:1547092154089187189 gas_ratio:1 gas_limit:1e+06 actions:<contract:"system.iost" action_name:"SetCode" data:"[\"{\\\"info\\\":{\\\"lang\\\":\\\"javascript\\\",\\\"version\\\":\\\"1.0.0\\\",\\\"abi\\\":[{\\\"name\\\":\\\"hello\\\",\\\"args\\\":[\\\"string\\\"]}]},\\\"code\\\":\\\"class HelloWorld {\\\\n    init() {}\\\\n    hello(someone) {\\\\n        return \\\\\\\"hello, \\\\\\\"+ someone\\\\n    }\\\\n}\\\\n\\\\nmodule.exports = HelloWorld;\\\\n\\\"}\"]" > amount_limit:<token:"*" value:"unlimited" > publisher:"admin" publisher_sigs:<algorithm:ED25519 signature:"x\327!F:\t\250\036\301M\345W{\303\265&\027\225\216\035\244\315\377][*\300\356\257\353\327\263[\036\2439\342D\327\037.R\273%\203\204Wj7\241\237\366Qi%\013t~\206\306\004#\007\001" public_key:"\350\022\265.\251\255\\\272\232\232\360:\374\306\362\224*E$\260\337<\003D\334\031Pr\203\026p\304" >
Sending tx to rpc server finished. The transaction hash is: 3xDYF2aPBmpcRNyVV8QdpQXeDxb6jdkWzpQ5sUmuNBhK
exec tx done
{
    "txHash": "3xDYF2aPBmpcRNyVV8QdpQXeDxb6jdkWzpQ5sUmuNBhK",
    "gasUsage": 36269,
    "ramUsage": {
        "admin": "356",
        "system.iost": "148"
    },
    "statusCode": "SUCCESS",
    "message": "",
    "returns": [
        "[\"Contract3xDYF2aPBmpcRNyVV8QdpQXeDxb6jdkWzpQ5sUmuNBhK\"]"
    ],
    "receipts": [
    ]
}
The contract id is Contract3xDYF2aPBmpcRNyVV8QdpQXeDxb6jdkWzpQ5sUmuNBhK

HelloWorldプログラムの実行

root@1b4f568854fb:/workdir# ./iwallet  --expiration 10000 --gas_limit 1000000 --gas_ratio 1  --server localhost:30002  --account admin  --amount_limit '*:unlimited'  call "Contract3xDYF2aPBmpcRNyVV8QdpQXeDxb6jdkWzpQ5sUmuNBhK" "hello" '["developer"]'
sending tx time:1547082303623287782 expiration:1547092303623287681 gas_ratio:1 gas_limit:1e+06 actions:<contract:"Contract3xDYF2aPBmpcRNyVV8QdpQXeDxb6jdkWzpQ5sUmuNBhK" action_name:"hello" data:"[\"developer\"]" > amount_limit:<token:"*" value:"unlimited" > publisher:"admin" publisher_sigs:<algorithm:ED25519 signature:"\253\007\307\024\334s\370\302\r8\246\333\334mhs\255-\007:]\301&d\360\231\2327p\314\226Z/\016\306\364{\307\251\346\307c\024\232\037\243\003]0\253k;\202\022\245\207\232d\210\225u=\252\010" public_key:"\350\022\265.\251\255\\\272\232\232\360:\374\306\362\224*E$\260\337<\003D\334\031Pr\203\026p\304" > sending tx
time:1547082303623287782 expiration:1547092303623287681 gas_ratio:1 gas_limit:1e+06 actions:<contract:"Contract3xDYF2aPBmpcRNyVV8QdpQXeDxb6jdkWzpQ5sUmuNBhK" action_name:"hello" data:"[\"developer\"]" > amount_limit:<token:"*" value:"unlimited" > publisher:"admin" publisher_sigs:<algorithm:ED25519 signature:"\253\007\307\024\334s\370\302\r8\246\333\334mhs\255-\007:]\301&d\360\231\2327p\314\226Z/\016\306\364{\307\251\346\307c\024\232\037\243\003]0\253k;\202\022\245\207\232d\210\225u=\252\010" public_key:"\350\022\265.\251\255\\\272\232\232\360:\374\306\362\224*E$\260\337<\003D\334\031Pr\203\026p\304" >
send tx done
the transaction hash is: 3ibCnq5E64jMjPXqTU3bFgsZQkbFeFyZM9cCKUcoFGCf
exec tx done
{
    "txHash": "3ibCnq5E64jMjPXqTU3bFgsZQkbFeFyZM9cCKUcoFGCf",
    "gasUsage": 33084,
    "ramUsage": {
    },
    "statusCode": "SUCCESS",
    "message": "",
    "returns": [
        "[\"hello, developer\"]"
    ],
    "receipts": [
    ]
}

4 - レシートの取得

root@1b4f568854fb:/workdir# ./iwallet receipt 3ibCnq5E64jMjPXqTU3bFgsZQkbFeFyZM9cCKUcoFGCf
{
    "txHash": "3ibCnq5E64jMjPXqTU3bFgsZQkbFeFyZM9cCKUcoFGCf",
    "gasUsage": 33084,
    "ramUsage": {
    },
    "statusCode": "SUCCESS",
    "message": "",
    "returns": [
        "[\"hello, developer\"]"
    ],
    "receipts": [
    ]
}

協力

Dr.和田隆夫 CTO エバーシステム株式会社
MEET IOST 開発者コミュニティ