GAS使用量問題

課題

Ethereum上でContractを動作させるには、Contractをデプロイする必要がありますが、デプロイ時には大量のGASが必要とされます。

例えば、IoTの機器一つ一つにIDを振るために、下記のようなシンプルなコントラクトを用意するとします。

  • クラス図

    SomeThingClass

  • コード

    contract SomeThing {
        bytes32 private id;
        string private name;
        function SomeThing(bytes32 _id, string _name) {
            id = _id;
            name = _name;
        }
        function getId() constant returns(bytes32) {
            return id;
        }
        function getName() constant returns(string) {
            return name;
        }
    }
    

getter/setterだけの単純なインスタンスですが、このインスタンスをBrowser-Solidityで Create してみます。

使用GAS

こちらのトランザクションコストは219,000GASになります。(Enable Optimizationなしの状態)

GASPriceやEtherの価格は変動しますが、仮に 1GAS を 0.00000002Etherとし、1Etherを$10、$1=¥100とすると、

0.00000002Ether x 219,000GAS x $10 = $0.0438 = ¥4.38

おおよそ5円弱のコストがかかっています。

これは、「Web3 deploy」の「data」の箇所を見れば明確で、コントラクトのデプロイには、全ソースをコンパイルしたデータを全てトランザクションに含める必要があるためです。

  • Web3 deploy

    var somethingContract = web3.eth.contract([{"constant":true,...}]);
    var something = somethingContract.new(
    {
        from: web3.eth.accounts[0],
        data:'0x606060405234610000575b610349806100186000396000f36060...',
        gas: '4700000'
    }, function (e, contract){
        console.log(e, contract);
        if (typeof contract.address !== 'undefined') {
            console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
        }
    })
    

また、これには別の問題も発生します。

この方法で大量のコントラクトをデプロイした場合、全てのコントラクトが同じようなロジックなのか保障できません。

対応方法 - GAS使用量問題

results matching ""

    No results matching ""