Share
Embed
Transcript
33 slides
-
2018/03/16 blockchain.tokyo #6 in Cyber Agent Kazuki Yamaguchi (@yamarkz) Gunosy
Inc. ৄղ Ethereum Transaction ~Transactionͷ֓ཁ͔ΒΈ·Ͱ·Δͬͱհ~ -
Kazuki Yamaguchi / @yamarkz Software Engineer @Gunosy Graduated from Spring
2017 WebApplication Rails Dapps Solidity Research CryptoCurrency & Blockchain Github & Twitter @yamarkz -
※τϥϯβΫγϣϯʹ͍ͭͯৄղʹͨ͢ΊɺϒϩοΫνΣʔϯɺΞΧϯτɺϚΠχϯάͳͲɺ पลγεςϜͷંΓ·͢ Agenda • Ethereum & Transaction • 2 Type
Transaction • Message 4 Pattern • Transaction Life Cycle • Transaction for Data Structure • Transaction Pool & Nonce • Transaction Releasing -
※ ίϯτϥΫτ࣮ߦͷΠϝʔδ ※ EtherʹΑΔࢧ͍ͷΠϝʔδ ίϯτϥΫτͷ࣮ߦ => τϥϯβΫγϣϯͷૹ৴ ICOͷࢀՃ => τϥϯβΫγϣϯͷૹ৴
Etherͷૹۚ => τϥϯβΫγϣϯͷૹ৴ ίϯτϥΫτͷ࡞ => τϥϯβΫγϣϯͷૹ৴ Ethereumʹ͓͍ͯɺTransactionશͯͷ࢝·Γ -
EthereumͷTransactionେ͖͘2ͭʹ͚ΒΕΔ Contract Creation Message (৽ͨͳίϯτϥΫτ࡞) (ίϯτϥΫτͷ࣮ߦ or Etherͷૹۚ) New!!! A͞Μ͔ΒB͞Μ
3Ether ૹۚ ίϯτϥΫτͷ࣮ؔߦ ৽ͨͳίϯτϥΫτͷσϓϩΠ A B -
(৽ͨͳίϯτϥΫτ࡞) Contract Creation ৽ͨͳίϯτϥΫτͷσϓϩΠ New!!! ͬͪ͜ΛΑΓਂ͘ղͯ͠ΈΔ EthereumͷTransactionେ͖͘2ͭʹ͚ΒΕΔ A͞Μ͔ΒB͞Μ 3Ether ૹۚ
A B ίϯτϥΫτͷ࣮ؔߦ Message (ίϯτϥΫτͷ࣮ߦ or Etherͷૹۚ) -
Message4ͭʹྨ͞ΕΔ Transaction From EOA EVM code From CA To EOA
To CA EOA EOA Transaction Message EOA CA Message CA EOA Message Code CA Code CA Transaction Message From: Ethereum EVM illustrated -
1. Transactionʹॺ໊ 2. TransactionΛϊʔυʹϒϩʔυΩϟετ ϊʔυ Tx ༗ޮͳτϥϯβΫγϣϯ͔όϦσʔγϣϯ ؔ࿈ϊʔυʹൖ TxPool Metamask
etc… Queued Pending ɾൖ࣌ͷTransactionɺSerialize͞ΕΔ ɾGas PriceʹΑͬͯϊʔυอ࣋͢Δ͔அͰ͖Δ Tx Tx Tx Tx Block Tx Tx ϚΠχϯά ϒϩοΫνΣʔϯ Txͷঢ়گʹΑͬͯɺ PendingͱQueued͚ΒΕΔ ΞΧϯτͷঢ়ଶ͕มΘΔ ΞΧϯτͷঢ়ଶ͕มΘΔ START ϚΠφʔϊʔυ ϊʔϚϧϊʔυ ϩʔΧϧϊʔυ A B Pendingͷத͔ΒϚΠχϯά͢ΔTxΛɺ ϚΠφʔ͕બ͢Δ -
Pendingͷத͔ΒϚΠχϯά͢ΔTxΛɺ ϚΠφʔ͕બ͢Δ ؔ࿈ϊʔυʹൖ TxPool Queued Pending ɾൖ࣌ͷTransactionɺSerialize͞ΕΔ ɾGas PriceʹΑͬͯϊʔυอ࣋͢Δ͔அͰ͖Δ Tx
Tx Tx Tx Block Tx Tx ϚΠχϯά ϒϩοΫνΣʔϯ Txͷঢ়گʹΑͬͯɺ PendingͱQueued͚ΒΕΔ ΞΧϯτͷঢ়ଶ͕มΘΔ ΞΧϯτͷঢ়ଶ͕มΘΔ ϚΠφʔϊʔυ ϊʔϚϧϊʔυ B A ϊʔυ Tx ༗ޮͳτϥϯβΫγϣϯ͔όϦσʔγϣϯ ϩʔΧϧϊʔυ 1. Transactionʹॺ໊ 2. TransactionΛϊʔυʹϒϩʔυΩϟετ Metamask etc… START -
Pendingͷத͔ΒϚΠχϯά͢ΔTxΛɺ ϚΠφʔ͕બ͢Δ 1. Transactionʹॺ໊ 2. TransactionΛϊʔυʹϒϩʔυΩϟετ ϊʔυ Tx ༗ޮͳτϥϯβΫγϣϯ͔όϦσʔγϣϯ Metamask
etc… Tx Tx Tx Tx Block ϚΠχϯά ϒϩοΫνΣʔϯ ΞΧϯτͷঢ়ଶ͕มΘΔ ΞΧϯτͷঢ়ଶ͕มΘΔ START ϩʔΧϧϊʔυ A B ؔ࿈ϊʔυʹൖ ɾൖ࣌ͷTransactionɺSerialize͞ΕΔ ɾGas PriceʹΑͬͯϊʔυอ࣋͢Δ͔அͰ͖Δ Tx ϚΠφʔϊʔυ ϊʔϚϧϊʔυ TxPool Queued Pending Tx Txͷঢ়گʹΑͬͯɺ PendingͱQueued͚ΒΕΔ -
1. Transactionʹॺ໊ 2. TransactionΛϊʔυʹϒϩʔυΩϟετ ϊʔυ Tx ༗ޮͳτϥϯβΫγϣϯ͔όϦσʔγϣϯ ؔ࿈ϊʔυʹൖ Metamask etc…
ɾൖ࣌ͷTransactionɺSerialize͞ΕΔ ɾGas PriceʹΑͬͯϊʔυอ࣋͢Δ͔அͰ͖Δ Tx ϒϩοΫνΣʔϯ ΞΧϯτͷঢ়ଶ͕มΘΔ ΞΧϯτͷঢ়ଶ͕มΘΔ START ϊʔϚϧϊʔυ ϩʔΧϧϊʔυ A B Tx Tx Tx Tx Block ϚΠχϯά ϚΠφʔϊʔυ TxPool Queued Pending Tx Txͷঢ়گʹΑͬͯɺ PendingͱQueued͚ΒΕΔ Pendingͷத͔ΒϚΠχϯά͢ΔTxΛɺ ϚΠφʔ͕બ͢Δ -
Pendingͷத͔ΒϚΠχϯά͢ΔTxΛɺ ϚΠφʔ͕બ͢Δ 1. Transactionʹॺ໊ 2. TransactionΛϊʔυʹϒϩʔυΩϟετ ϊʔυ Tx ༗ޮͳτϥϯβΫγϣϯ͔όϦσʔγϣϯ ؔ࿈ϊʔυʹൖ
TxPool Metamask etc… Queued Pending ɾൖ࣌ͷTransactionɺSerialize͞ΕΔ ɾGas PriceʹΑͬͯϊʔυอ࣋͢Δ͔அͰ͖Δ Tx Tx Tx Tx Block Tx Tx Txͷঢ়گʹΑͬͯɺ PendingͱQueued͚ΒΕΔ START ϚΠφʔϊʔυ ϊʔϚϧϊʔυ ϩʔΧϧϊʔυ A ϚΠχϯά ΞΧϯτͷঢ়ଶ͕มΘΔ ΞΧϯτͷঢ়ଶ͕มΘΔ B ϒϩοΫνΣʔϯ A -
1. Transactionʹॺ໊ 2. TransactionΛϊʔυʹϒϩʔυΩϟετ ϊʔυ Tx ༗ޮͳτϥϯβΫγϣϯ͔όϦσʔγϣϯ ؔ࿈ϊʔυʹൖ TxPool Metamask
etc… Queued Pending ɾൖ࣌ͷTransactionɺSerialize͞ΕΔ ɾGas PriceʹΑͬͯϊʔυอ࣋͢Δ͔அͰ͖Δ Tx Tx Tx Tx Block Tx Tx ϚΠχϯά ϒϩοΫνΣʔϯ Txͷঢ়گʹΑͬͯɺ PendingͱQueued͚ΒΕΔ ΞΧϯτͷঢ়ଶ͕มΘΔ ΞΧϯτͷঢ়ଶ͕มΘΔ START ϚΠφʔϊʔυ ϊʔϚϧϊʔυ ϩʔΧϧϊʔυ A B Pendingͷத͔ΒϚΠχϯά͢ΔTxΛɺ ϚΠφʔ͕બ͢Δ Ұ࿈ͷྲྀΕΛܦͯɺτϥϯβΫγϣϯ࠷ऴతʹΞΧϯτͷঢ়ଶΛมߋ͢Δ -
Transaction Nonce Gas Price Gas Limit To Value v, r,
s Init or data CLI্Ͱ֬ೝͰ͖ΔTransactionͷத Transaction for Data Structure -
CLI্Ͱ֬ೝͰ͖ΔTransactionͷத Nonce Gas Price Gas Limit To Value v, r,
s Init or data ϢχʔΫͰ͋Δ͜ͱΛࣔ͢ ૹۚ͢ΔEtherͷֹ Contract࣮ߦ࣌ʹফඅ͢ΔGasͷ੍ݶ EVMίʔυ͕ೖΔϑΟʔϧυ Transaction Transaction for Data Structure -
Pendingͷத͔ΒϚΠχϯά͢ΔTxΛɺ ϚΠφʔ͕બ͢Δ 1. Transactionʹॺ໊ 2. TransactionΛϊʔυʹϒϩʔυΩϟετ ϊʔυ Tx ༗ޮͳτϥϯβΫγϣϯ͔όϦσʔγϣϯ ؔ࿈ϊʔυʹൖ
Metamask etc… ɾൖ࣌ͷTransactionɺSerialize͞ΕΔ ɾGas PriceʹΑͬͯϊʔυอ࣋͢Δ͔அͰ͖Δ Tx Tx Tx Tx Block Tx ϚΠχϯά ϒϩοΫνΣʔϯ ΞΧϯτͷঢ়ଶ͕มΘΔ ΞΧϯτͷঢ়ଶ͕มΘΔ START ϚΠφʔϊʔυ ϊʔϚϧϊʔυ ϩʔΧϧϊʔυ A B TxPool Queued Pending Tx ͜͜ͷ Txͷঢ়گʹΑͬͯɺ PendingͱQueued͚ΒΕΔ -
Transaction Pool Transaction Pool (ҎԼɺTxPool)ͱɺϒϩοΫʹऔΓࠐ·ΕΔલͷτϥϯβΫγϣϯ͕Ұ࣌ తʹอଘ͞ΕΔۭؒɻۭؒϊʔυͷϚγϯϝϞϦ্ʹ࡞ΒΕΔɻ ϚγϯϝϞϦ্ʹ࡞ΒΕΔͨΊɺϚγϯͷిݯ͕མͪΔͱTxPoolͷτϥϯβΫγϣϯফ͑ Δɻ ϊʔυࣗͷϝϞϦۭؒʹؚΊΔτϥϯβΫγϣϯΛGasPriceͰબผ͢Δ͜ͱ͕Ͱ͖Δɻ TxPoolͷۭؒ2ͭ
Pending • ϒϩοΫʹऔΓࠐ·ΕͯOKͳτϥϯβΫγϣϯ͕อଘ͞ΕΔ Queued • ϒϩοΫʹऔΓࠐ·ΕͯNGͳτϥϯβΫγϣϯ͕อଘ͞ΕΔ • τϥϯβΫγϣϯͷNonceʹΪϟοϓ͕ଘࡏ͢Δ߹ɺPendingͰͳ͘ɺ Queuedʹอଘ͞ΕΔɻQueuedͷׂɺωοτϫʔΫ͔Β౸ணͨ͠ॱং֎τϥ ϯβΫγϣϯΛΧόʔ͢Δ͜ͱɻ(τϥϯβΫγϣϯͷॱংΛकΔ͜ͱ) -
Transaction Pool & Nonce TxPool ͷPendingͱQueuedͷڍಈ Nonce 37ͷTx͕Γͳ͍ঢ়گ Nonce 37͕TxPoolʹϒϩʔυΩϟετ
or ൖ͞Εͨ͜ͱʹΑΓɺ QueuedͷTxnonceͷॱং͕ἧ͏ɻ ἧ͏͜ͱͰϚΠχϯάOKͳTxʹͳΓPendingʹҠಈ͢Δ -
Transaction Nonce From: Mastering Ethereum NonceಉҰΞΧϯτ͔ΒͷTransaction Orderͷূ໌Ͱ͋Γɺ τϥϯβΫγϣϯͷೋॏࢧग़Λղܾ͢Δɻ NonceTransactionʹ͓͍ͯ࠷ॏཁͳίϯϙʔωϯτͰ͋Γɺ ࠷ཧղ͞Ε͍ͯͳ͍ՕॴͰ͋Δɻ
Tx Nonce 1 Tx Nonce 2 Tx Nonce 3 Tx Nonce 4 ಉҰΞΧϯτ͔ΒͷτϥϯβΫγϣϯNonceͷॱংʹԊͬͯɺϒϩοΫʹऔΓࠐ·ΕΔɻ Nonce1ͱNonce2ͷτϥϯβΫγϣϯ͕ಉҰΞΧϯτA͔Β࡞ΒΕͨ߹ɺNonce2ͷτϥϯ βΫγϣϯNonce1ͷτϥϯβΫγϣϯ͕ϚΠχϯά͞Εͳ͍ݶΓɺϚΠχϯά͞Εͳ͍ɻ NonceͷॱংʹԊͬͯτϥϯβΫγϣϯ͕ϒϩοΫʹऔΓࠐΉϓϩτίϧʹΑΓɺೋॏࢧग़Λ ͍Ͱ͍Δɻ -
Transaction Releasing ະঝೝτϥϯβΫγϣϯͷߋ৽ (Releasing) ߋ৽͍ͨ͠τϥϯβΫγϣϯʹৼΒΕ͍ͯΔNonceͱಉ͡NonceΛࢦఆͨ͠τϥϯβΫγϣϯ Λ࡞͠ɺϒϩʔυΩϟετ͢Δ͜ͱͰະঝೝτϥϯβΫγϣϯΛߋ৽͢Δ͜ͱ͕Ͱ͖Δɻ ߋ৽Ͱͷमਖ਼͕ՄೳͳͷͰɺ3Etherͷૹ৴͢ΔͷΛͳ͔ͬͨ͜ͱʹ͢ΔͨΊʹɺ0Etherͷ τϥϯβΫγϣϯΛૹ৴͠ͳ͓ͤɺະঝೝτϥϯβΫγϣϯߋ৽͞ΕΔͷͰɺͳ͔ͬͨ͜ ͱʹͳΔɻ(※खྉͰ͋ΔGasඞཁ) ߋ৽ͰŊߋ৽ઌτϥϯβΫγϣϯ͕࣋ͭGasPriceͷ10%Ҏ্ߴ͍
GasPriceͷߋ৽τϥϯβΫ γϣϯΛ࡞͠ͳ͚Ε͍͚ͳ͍ Tx A͞Μ͔ΒB͞Μ 3Etherͷૹۚ Tx A͞Μ͔ΒB͞Μ 0Etherͷૹۚ ߋ৽ઌ ߋ৽ݩ ߋ৽ʂʂ ϒϩʔυΩϟετ Tx A͞Μ͔ΒB͞Μ 0Etherͷૹۚ TxPool -
ɾWhat is Gas? ɾEthereum EVM Illustrated ɾMastering Ethereum ɾEthereum White
Paper ɾEthereum Yellow Paper ɾEthereum Wiki ɾLife Cycle of an Ethereum Transaction ࢀߟࢿྉ -
Q&A 1 Q. τϥϯβΫγϣϯͷૹۚݩͲ͏ͬͯஅ͢Δͷʁ A. τϥϯβΫγϣϯʹؚ·ΕΔॺ໊ૹ৴ݩͷΞΧϯτͷൿີ伴͔Β͔͠࡞ΒΕͳ͍ͨΊɺͦͷॺ ໊Ͱஅ͢Δ Q.τϥϯβΫγϣϯΛ࡞ͨ͠ͷͷɺΞΧϯτεςʔτͷߋ৽ͷॱংͰૹۚऀ͕ेͳEtherΛ ͍࣋ͬͯͳ͔ͬͨ߹τϥϯβΫγϣϯͲ͏ͳΔͷʁ A.
τϥϯβΫγϣϯૹࣦۚഊͱͳΔͷͷɺτϥϯβΫγϣϯࣗମϚΠχϯά͞Εɺखྉͷ Έ͕ϚΠφʔʹࢧΘΕΔ Q.ΞΧϯτ͕࣋ͭNonceΑΓ͍Λ߱ͬͨτϥϯβΫγϣϯΛϒϩʔυΩϟετ͢ΔͱͲ͏ͳΔ ͷʁ A. ϒϩʔυΩϟετઌͷϩʔΧϧϊʔυͷόϦσʔγϣϯͰ͔ΕTxPoolʹೖΒͣɺτϥϯβΫγϣ ϯഁغ͞Εɺૹ৴ݩʹΤϥʔ͕ฦΔ Q.τϥϯβΫγϣϯʹઃఆͰ͖ΔGas Limitͷ࠷ߴ͍ͭ͘ʁ A. ཧ্ϒϩοΫͷGas Limitͱಉ͡ -
Q&A 2 Q. ϒϩʔυΩϟετͨ͠τϥϯβΫγϣϯΛআ͍ͨ͠߹Ͳ͏͢Εྑ͍ͷʁ A. EthereumͰϒϩʔυΩϟετͨ͠τϥϯβΫγϣϯͷআػೳ͋Γ·ͤΜɻԾʹɺτϥϯβΫ γϣϯΛͳ͔ͬͨ͜ͱʹ͍ͨ͠ (ૹۚΛऔΓফ͍ͨ͠) ߹ɺಉ͡NonceͰValueΛ0ʹ͠Gas PriceΛߴ͍ͷʹ࡞ͯ͠ϒϩʔυΩϟετ͢Δ
Q. ૹۚͷΈͰར༻ͨ͠߹ͷखྉͬͯͲ͏ͳΔͷʁ A. GasPrice × τϥϯβΫγϣϯͷόΠτ ͷ͕खྉʹͳΔ Q. TxPoolͷ྆ʑ͕ᷓΕΔ΄ͲτϥϯβΫγϣϯ͕ཷ·ͬͨ߹ɺᷓΕͨτϥϯβΫγϣϯͲ͏ͳΔ ͷʁ A. τϥϯβΫγϣϯͷGasPrice͕͍ͷ͔ΒPool͔Β͍ग़͞Ε͍ͯ͘ Q. NonceͷॱংͰɺઌʹߴ͍NonceͷτϥϯβΫγϣϯΛϚΠφʔ͕ϚΠχϯά͠ɺϚΠχϯάʹޭ ͨ͠߹ɺϒϩοΫͲ͏ͳΔͷʁ A. ԾʹɺϚΠχϯάʹޭͨ͠ͱͯ͠ɺNonceͷॱংΛक͍ͬͯͳ͍τϥϯβΫγϣϯΛؚΜͩϒ ϩοΫແޮͱͳΓɺνΣʔϯʹܨ͕Εͳ͍