まず、前回デプロイした contract を こんな感じ に改良する。具体的には、require_auth(user)
という行を追加しただけ。これで、コントラクトの実行ユーザーと user
が同じじゃないと hi
action が実行できなくなる。
ということで、改良した contract をコンテナ上に持っていく。
$ docker cp contracts/hello-with-auth/hello.cpp eos:/tmp/contracts/hello/hello.cpp
コンテナに接続。
$ docker exec -it eos bash
以降、コンテナ上で作業を進める。
前回と同じようにコンパイルして WASM をつくりなおす。
$ cd /tmp/contracts/hello
$ eosio-cpp -o hello.wasm hello.cpp --abigen
hello
account に対して新しい contract をデプロイしてアップデートする。こんな感じで軽々しく contract をアップデートできる辺り、Ethereum と感覚が違う。
$ cleos set contract hello . -p hello@active
Reading WASM from /tmp/contracts/hello/hello.wasm...
Skipping set abi because the new abi is the same as the existing abi
Publishing contract...
executed transaction: f5fa8e0140accdcc98d32a1983d7988fb1289b5c49029e4bb430190d9e8f05c2 1400 bytes 35142 us
# eosio <= eosio::setcode {"account":"hello","vmtype":0,"vmversion":0,"code":"0061736d0100000001390b60027f7e006000017f60027f7f...
ABI は変わってないので更新しなかったよとのこと。インターフェースなので当然ではある。
contract の更新ができたようなので、前回は実行できた「alice
が引数 "bob"
で hi
action を実行する」をやってみる。
$ cleos push action hello hi '["bob"]' -p alice@active
Error 3090004: Missing required authority
Ensure that you have the related authority inside your transaction!;
If you are currently using 'cleos push action' command, try to add the relevant authority using -p option.
Error Details:
missing authority of bob
pending console output:
想定通り、権限がないのでエラーになった。
引数を "alice"
に変えてやってみる。
$ cleos push action hello hi '["alice"]' -p alice@active
executed transaction: 46bb434dfd147d9b7902faa834b4222032b5a429a44362598bcb3c23ced12413 104 bytes 2905 us
# hello <= hello::hi {"user":"alice"}
>> Hello, alice
こちらは実行できた。OK。
今日はここまで。