自己紹介
- Hi-Ether ID: blueplanet
- 魚 振江(ぎょ しんこう)
- Ruby on Rails フリーランス
- 2017年
- 5月頃から仮想通貨の取引所システムの改修
- 10月頃からブロックチェーンの勉強
自己紹介
今日話したいこと
- イーサリアム上定時実行仕組みがない!!!
- スマートコントラクトの解決案 ethereum-alarm-clock
- 課題
イーサリアム上定時実行仕組みがない!!!
イーサリアムというか、ブロックチェーンのDAPP開発は、意外に制限あるよね
イーサリアム上定時実行仕組みがない!!!
contract PackedArray {
uint[] public arrays;
function push(uint[] _args) public {
arrays = _args;
}
function remove(uint index) public {
PackedArray(this).pack(arrays, index);
}
function pack(uint256[] _arrays, uint256 _deleteIndex) external {
uint256 length = _arrays.length;
uint256[] memory copy = new uint256[](length - 1);
assembly {
//find array data pos;
let freep := mload(0x40)
mstore(0x40, add(freep, 0x20))
calldatacopy(freep, 0x4, 0x20)
// array data first 32 byte is length. so slide to array body pos;
let arrayDataPos := add(mload(freep), 0x20)
let size := mul(0x20, _deleteIndex)
// method sig 4byte.
calldatacopy(add(copy, 0x20), add(0x04, arrayDataPos), size)
let afterpos := add(add(copy, 0x20), size)
let alldatasize := mul(0x20, length)
let aftersize := sub(alldatasize, add(size, 0x20))
let afterindexPos := add(add(arrayDataPos, size), 0x20)
calldatacopy(afterpos, add(0x04, afterindexPos), aftersize)
}
arrays = copy;
}
}
イーサリアム上定時実行仕組みがない!!!
イーサリアム上定時実行仕組みがない!!!
- 今までの定時実行は、サーバー・マシン上でのスケジューラに任せている
- ブロックチェーンの論理上、定時実行の仕組みが難しい
イーサリアム上定時実行仕組みがない!!!
イーサリアムに限っているお話し
- すべての処理は、トランザクションから始まる
- 定時実行の場合、トランザクションを送信する送信元がない
- P2Pネットワークのノードがいつでも参加・退出できる
- 定時実行の場合、任せられる実行者がいない
スマートコントラクトの解決案
スマートコントラクトの解決案
下記のトランザクションを作成しておけば、指定した時間帯で実行してくれる
import 'contracts/Interface/SchedulerInterface.sol';
...
SchedulerInterface scheduler = SchedulerInterface(0xTODO);
uint lockedUntil = block.number + _numBlocks;
scheduler.schedule.value(2 ether)(
myContractAddress, // 呼び出されたいスマートコントラクトアドレス
"", // 関数のパラメータデータ
[
2000000, // 取引と一緒に送付されるガスの量。
0, // 送信するガス量
255, // 実行ウインドウのサイズ
lockedUntil, // 開始ブロック番号
30000000000 wei, // GAS price
12345 wei, // 取引に含まれる寄付
224455 wei, // 取引に含まれる支払い
20000 wei // 請求者がデポジットとして送信しなければならない必要額。
]
);
...
構成
- 実行したいパラメータで
TransactionRequest
スマートコントラクトをブロックチェーンに登録しておく - EAC(Ethereum Alarm Clock)クライアントを実行しているノードは
TransactionRequest
スマートコントラクトをスキャンし、指定された時間帯にてトランザクションを発行してくれる- イーサリアムのノードと関係なし
- 実際実行されたら、実行してくれた EAC クライアントに報酬と実行に使ったGASを返す
構成
npm i -g eac.js
eac.js -c
構成
構成
課題
- 現状はテストネット上しか稼働してない
課題
- 開発が止まっていた
課題
開発再開されました
結論
- まだライブネットで使えないですが、これからする