[ブロックチェーンノート6]truffleによる契約とのインタラクション
8142 ワード
文書ディレクトリ
知識を敷く.
イーサー坊ネットワークでは,通常,書き込みデータをトランザクションと呼び,読み出しデータを呼び出しと呼ぶ.
取引には実行コストがあり、gasを消費し、ネットワークの状態を変更し、直ちに処理せず、通常取引のidを取得する.呼び出しは無料で、gasを消費せず、ネットワークの状態を変更せず、直ちに処理し、戻り値がある.
環境構築
このノートにはtruffleの例を使用したMetaCoin契約が必要です.
truffle unbox webpack
です.ここでは降りられないのでgitでダウンロードします.git clone https://github.com/truffle-box/webpack-box
ソース分析
pragma solidity >=0.4.21 <0.7.0;
library ConvertLib {
//convert: amount
function convert(uint amount,uint conversionRate) public pure returns (uint convertedAmount) {
return amount * conversionRate;
}
}
pragma solidity >=0.4.21 <0.7.0;
import "./ConvertLib.sol";
contract MetaCoin {
//
mapping (address => uint) balances;
//Transfer
event Transfer(address indexed _from, address indexed _to, uint256 _value);
// --> 10000
constructor() public {
balances[msg.sender] = 10000;
}
//
function sendCoin(address receiver, uint amount) public returns(bool sufficient) {
if (balances[msg.sender] < amount) return false;
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Transfer(msg.sender, receiver, amount);
//emit
return true;
}
//
function getBalanceInEth(address addr) public view returns(uint) {
return ConvertLib.convert(getBalance(addr),2);
}
//
function getBalance(address addr) public view returns(uint) {
return balances[addr];
}
}
契約抽象
文
MetaCoin.deployed().then(instance => contract = instance)
によってMetaCoin契約の抽象を取得し、contract変数に返す.このときcontract変数でそのメソッドにアクセスできます.Web 3を通じて.jsと契約のインタラクション
web3.eth.accounts
でGanacheネットワーク上のすべてのアカウントアドレス用変数を取得できますvar accounts = web3.eth.accounts
トランザクションパラメータ–sendCoin関数には3番目のパラメータがなく、3番目のパラメータ{from:accounts[0]}が入力されます.もちろん、このパラメータはトランザクションパラメータと呼ばれる特殊なパラメータであり、常に最後のパラメータとして関数に渡すことができ、容易な関連詳細を設定するために使用できます.取引パラメータはまだたくさんありますが、ここでは詳しく説明しません.そして
testContract.getBalance(accounts[0])
testContract.getBalance(accounts[1])
文で2つの口座のbalance情報を検索し、ここは本物の振り替えではなく、mappingの中の振り替えであることに注意します.取引実行結果
var result = testContract.sendCoin(accounts[1], 5)
resultは多くの情報を返し、ここではresultの一部のみを記録する.tx–トランザクションのハッシュ値ID result.logs-トランザクションログresult.receipt–取引文書ですが、問題があります.菜鶏はresultに戻ることができますが、中の属性を取得できません.どういうことか分かりません.指定されたアドレス契約の契約抽象を取得
すでに契約アドレスがある場合は、そのアドレスの契約を表す契約抽象を作成できます.
const specificInstance = await MetaCoin.at("0x1234...");
truffleは契約書にイーサを送信する
instance.sendTransaction()
かinstance.send()
でいいです.