Closed soudegesu closed 6 years ago
if (typeof web3 !== 'undefined') {
// reuse the provider of the web3 object injected by Metamask
App.web3Provider = web3.currentProvider;
}
submitする時に MetaMaskがインターセプトする
MetaMaskはだいぶbuggyなのね
npm run truffle-console
ではよくこれを実行する
ChainList.deployed().then(function(instance){app = instance;})
sellEvent = app.LogSellArticle({},{}).watch(function(error, event){console.log(event);})
app.sellArticle("article 1", "Description of article 1", web3.toWei(10, "ether"), {from: web3.eth.accounts[1]})
solidity
におけるイベントは特定の処置をwatchしたりフックしたりしたい場合に定義すればよいのか?
なぜ普通にfunctionに書かないのだろうか。。
トランザクションの情報も合わせて取得したい場合なのだろうか
{ logIndex: 0,
transactionIndex: 0,
transactionHash: '0xb6a93bc00b33c6db4bcfc79f4d33b9cba7830f0ecfbc0f5f292de2cab42263e5',
blockHash: '0x2b3ff8d7a31bd93463af646babc82d6cd5f020090e2f22f6ba9397779f651950',
blockNumber: 3,
address: '0x345ca3e014aaf5dca488057592ee47305d9b3e10',
type: 'mined',
event: 'LogSellArticle',
args:
{ _seller: '0x627306090abab3a6e1400e9345bc60c78a8bef57',
_name: 'Default article',
_price: BigNumber { s: 1, e: 19, c: [Array] } } }
BigNumber { s: 1, e: 0, c: [ 1 ] } って何よ
storage
って何よ
memory
って何よ
Event
てどうして必要よ
deactivateの仕方
deactivateはコントラクトオーナーだけが実行可能
こんなfunctionを作成して実行してみる
// deactivate the contract
function kill() {
// only allow the contract owner
require(msg.sender == owner);
selfdestruct(owner);
}
truffle(ganache)> app.kill({from: web3.eth.accounts[1]})
Error: VM Exception while processing transaction: revert
at Object.InvalidResponse (/Users/takaaki-suzuki/private/chainlist-sample/node_modules/truffle/build/cli.bundled.js:41484:16)
at /Users/takaaki-suzuki/private/chainlist-sample/node_modules/truffle/build/cli.bundled.js:329530:36
at /Users/takaaki-suzuki/private/chainlist-sample/node_modules/truffle/build/cli.bundled.js:325200:9
at XMLHttpRequest.request.onreadystatechange (/Users/takaaki-suzuki/private/chainlist-sample/node_modules/truffle/build/cli.bundled.js:328229:7)
at XMLHttpRequestEventTarget.dispatchEvent (/Users/takaaki-suzuki/private/chainlist-sample/node_modules/truffle/build/cli.bundled.js:176415:18)
at XMLHttpRequest._setReadyState (/Users/takaaki-suzuki/private/chainlist-sample/node_modules/truffle/build/cli.bundled.js:176705:12)
at XMLHttpRequest._onHttpResponseEnd (/Users/takaaki-suzuki/private/chainlist-sample/node_modules/truffle/build/cli.bundled.js:176860:12)
自分のアカウントであればいける
truffle(ganache)> app.kill({from: web3.eth.accounts[0]})
{ tx: '0x20dd7863da4d79939c026e890e21a16832e55b0410adc8d9826414e806928f96',
receipt:
{ transactionHash: '0x20dd7863da4d79939c026e890e21a16832e55b0410adc8d9826414e806928f96',
transactionIndex: 0,
blockHash: '0x9d5a1f050bb9b14c3dfb5061e82584050fce8d7636e93d93186b1c4f5b4825dd',
blockNumber: 8,
gasUsed: 13467,
cumulativeGasUsed: 13467,
contractAddress: null,
logs: [],
status: 1 },
logs: [] }
全ての自身のコントラクトがresetされた
truffle(ganache)> app.getArticlesForSale()
[]
selfdestruct
されたアカウントからのETHの出入りは動かなくなるが、
他アカウントでは問題なく動かせる。
アカウントアドレスのDNSサービスがある https://ens.domains/#
関数の修正に使う modifier
宣言
modifierは何もreturnしない。引数もとらない。
modifier内の _
はmodifierが適用される関数を表すplaceholderになる
modifier
はAOPみたいな動きをするのね。
// modifiers
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
// deactivate the contract
function kill() public onlyOwner {
selfdestruct(owner);
}
ここを参考にする