2017-04-26 9 views

答えて

1

スマートコントラクトフォームで取引を読み込もうとしている場合、ブロックチェインの回答は硬直では「いいえ」ですが、これは存在しません。 Robの例でWeb3.jsを使ったり、外部データベースにtransactiosnのログを保存したりすることができます。これは複雑さと多くのトランザクションと非同期的な問題をチェックする複雑さのためです。

他のケースでは、例のために、チェックのために取引を外部APIを使用して歴史を持つことができます。https://etherscan.io/apis

3

スマートコントラクトに、そのようなアクティビティを記録するデータ構造があれば可能です。

急いで準備された例:

pragma solidity ^0.4.6; 

contract TrackPayments { 

    struct PaymentStruct { 
     address sender; 
     uint amount; 
    } 

    // look up the struct with payment details using the unique key for each payment 
    mapping(bytes32 => PaymentStruct) public paymentStructs; 

    // payment keys in order received 
    bytes32[] public paymentKeyList; 

    event LogPaymentReceived(address sender, uint amount); 

    function payMe() public payable returns(bool success) { 
     if(msg.value==0) throw; 
     // make a unique key ... 
     bytes32 newKey = sha3(msg.sender, paymentKeyList.length); 
     paymentStructs[newKey].sender = msg.sender; 
     paymentStructs[newKey].amount = msg.value; 
     paymentKeyList.push(newKey); 
     LogPaymentReceived(msg.sender, msg.value); 
     return true; 
    } 

    function getPaymentCount() public constant returns(uint paymentCount) { return paymentKeyList.length; } 

} 

これは少しより多くのストレージ効率順次またはランダムのいずれかのアクセスを犠牲にするコストである可能性があります。この方法は両方を行います。

希望します。

+0

いいえ、私は本当にスマート契約が直接読み取るblockchainを形成することができるかどうかを確認しようとしていました。そうではありません。 – RFVenter

+0

ええ、手動で実装する必要があります。 https://live.ether.camp/のようなブロックチェインエクスプローラ(外部プログラム)をお持ちの場合は、特定のブロックの内容を表示することができます。ただし、*契約内の*ものを追跡し、プログラムで取得する場合は、手動で実装する必要があります。 –

関連する問題