Share
Embed
Goはブロックチェーン領域でなぜ使われ、どのように活躍しているのか
Google slide: https://docs.google.com/presentation/d/1TTw5Ff26Ze0oiDr2w-cDwXWD8NgGuI0ChI2iGeg4pu0/edit?usp=sharing
uji
June 02, 2023
Transcript
36 slides
-
GoϒϩοΫνΣʔϯྖҬͰͳͥ ΘΕɺͲͷΑ͏ʹ׆༂͍ͯ͠Δͷ͔ Money Forward, Inc. uji Why and how
Go is used and active in the blockchain domain -
uji • Software engineer @Money Forward, Inc. Web3 group (Osaka)
• A four-year-old Gopher • Kyoto.go organizer -
• ϒϩοΫνΣʔϯͱɺτϥϯβΫγϣϯ(औҾͷ୯Ґ)Λ ҉߸ٕज़ʹΑͬͯه͢Δٕज़ • ͍͔ͭ͘ͷτϥϯβΫγϣϯΛʮϒϩοΫʯͱݺΕΔ୯ҐͰه͠ɺ ͦΕΒΛʮνΣʔϯʯঢ়ʹͭͳ͛Δ͜ͱͰσʔλͷෆมੑͱಁ໌ੑΛ֬อ ϒϩοΫνΣʔϯͷ֓ཁ ϒϩοΫ τϥϯβΫγϣϯ τϥϯβΫγϣϯ
τϥϯβΫγϣϯ ϒϩοΫ τϥϯβΫγϣϯ τϥϯβΫγϣϯ τϥϯβΫγϣϯ ϒϩοΫ τϥϯβΫγϣϯ τϥϯβΫγϣϯ τϥϯβΫγϣϯ -
• εϚʔτίϯτϥΫτͱݺΕΔΈ͕ଘࡏ͢Δ߹͕ଟ͍ ◦ ͋Β͔͡ΊܾΊΒΕͨܖऔҾΛɺհऀͳ͠ͰࣗಈࣥߦͰ͖ΔΈ • ϓϩάϥϜΛॻ͘͜ͱͰɺ༷ʑͳऔҾͷ ϒϩοΫνΣʔϯ্Ͱͷࣗಈࣥߦ͕࣮ݱͰ͖Δ ◦ ྫ ▪
҉߸ࢿ࢈ಉ࢜ͷۚ ▪ ΦϦδφϧͷ௨՟NFTͷൃߦɾৡ ϒϩοΫνΣʔϯͷ֓ཁ ਗ਼ྋҿྉਫͷࣗಈൢചػ εϚʔτίϯτϥΫτͱݴ͑Δ Kyoto.goϒʔεͰ NFTதʂ -
ϒϩοΫνΣʔϯΛࢧ͑Δओͳٕज़ཁૉҎԼ • ҉߸ٕज़ • ϒϩοΫνΣʔϯͷσʔλߏ • P2P௨৴ • ίϯηϯαεΞϧΰϦζϜ •
τϥϯβΫγϣϯΛॲཧ͢ΔϥϯλΠϜ ϒϩοΫνΣʔϯΛࢧ͑Δٕज़ -
ϒϩοΫνΣʔϯͰ҉߸ٕज़ॏཁͳׂΛ୲͓ͬͯΓɺ ͋ΒΏΔ໘Ͱར༻͞Ε͍ͯΔ • ΞΧϯτͷཧ ◦ ϒϩοΫνΣʔϯͷΞΧϯτɺެ։伴ͱൿີ伴ͷϖΞͰѻΘΕΔ͜ͱ͕ଟ͍ ◦ 伴ϖΞͷੜཧʹɺsecp256k1ͳͲͷପԁۂઢ҉߸͕ར༻͞ΕΔ • τϥϯβΫγϣϯͷॺ໊
◦ τϥϯβΫγϣϯൃߦऀσδλϧॺ໊ʹͯΞΧϯτͷূ໌Λߦ͏ ◦ ECDSAEdDSAͳͲͷॺ໊ΞϧΰϦζϜ͕ར༻͞ΕΔ • ϋογϡؔͷར༻ ◦ ϒϩοΫͷϋογϡͷܭࢉͳͲ ◦ ओʹKeccak256ͳͲ͕ར༻͞ΕΔ ϒϩοΫνΣʔϯΛࢧ͑Δٕज़ʢ̍ʣ ҉߸ٕज़ -
• ϒϩοΫϒϩοΫϋογϡͱݺΕΔΛ࣋ͭɺ ◦ લͷϒϩοΫͷϋογϡɺλΠϜελϯϓɺϊϯεͳͲΛϋογϡԽͨ͠ͷ • ϒϩοΫ͕લͷϒϩοΫͷϋογϡΛ͓࣋ͬͯΓɺ͋Δ࣌ͷϒϩοΫͷ Λม͑ΔͱޙଓͷϒϩοΫͷσʔλมΘͬͯ͘Δ ◦ վ͟Μ͕ݕग़Ͱ͖Δ ϒϩοΫνΣʔϯΛࢧ͑Δٕज़ʢ̎ʣ
σʔλߏ “Ethereum whitepaper” ΑΓҾ༻ https://ethereum.org/en/whitepaper/ -
• ωοτϫʔΫͷͯ͢ͷϊʔυ͕ϒϩοΫνΣʔϯͷঢ়ଶʹ͍ͭͯ ߹ҙΛܗ͢ΔͨΊͷΈ • ϒϩοΫੜऀͷܾఆɺϒϩοΫʹؚ·ΕΔऔҾͷॱং͚ͮͳͲʹ ϧʔϧΛઃ͚Δ͜ͱͰɺೋॏࢧ͍ωοτϫʔΫࢀՃऀͷෆਖ਼ߦҝΛ͙ • νΣʔϯʹΑͬͯ͞·͟· ◦ ྫ:
PoW(ϓϧʔϑɾΦϒɾϫʔΫ) ▪ ϏοτίΠϯͰΘΕ͍ͯΔ ▪ ϚΠχϯάʢܭࢉΛղ͘ߦҝʣͨ͠ϊʔυʹ ϒϩοΫੜݖ͕༩͑ΒΕΔϧʔϧʹΑΓɺෆਖ਼ߦҝͷίετΛ૿Ճ ϒϩοΫνΣʔϯΛࢧ͑Δٕज़ʢ̐ʣ ίϯηϯαεΞϧΰϦζϜ -
• ϊʔυॊೈͳऔҾΛ࣮ݱ͢ΔͨΊʹɺ εϚʔτίϯτϥΫτͳͲͷϓϩάϥϜΛ࣮ߦ͢Δ • ࣮ߦ݁ՌͷݕূΛߦ͏ͨΊͷڥ͕ඞཁͱͳΔ • ϥϯλΠϜͷಛੑϒϩοΫνΣʔϯʹΑ༷ͬͯʑ ੍ར༻Ͱ͖Δϓϩάϥϛϯάݴޠ͕มΘͬͯ͘Δ ◦ ྫɿEthereum
Virtual MachineʢEVMʣ ▪ SolidityVyperͳͲͷݴޠͰهड़͞ΕͨεϚʔτίϯτϥΫτΛ࣮ߦͰ͖Δ ▪ νϡʔϦϯάશʢϧʔϓΛؚΉҙͷϓϩάϥϜΛ࣮ߦͰ͖Δʣ ϒϩοΫνΣʔϯΛࢧ͑Δٕज़ʢ̑ʣ τϥϯβΫγϣϯΛॲཧ͢ΔϥϯλΠϜ -
ϒϩοΫνΣʔϯͷTLV(ϩοΫ͞Ε͍ͯΔ҉߸ࢿ࢈ͷֹ)ʹΑΔϥϯΩϯά ϒϩοΫνΣʔϯࣗମͷ։ൃݴޠ ॱҐ νΣʔϯ ϝΠϯݴޠ ॱҐ νΣʔϯ ϝΠϯݴޠ 1 Ethereum
11 Fantom 2 Tron 12 Cronos 3 BSC 13 DefiChain 4 Arbitrum 14 Klaytn 5 Polygon 15 Bitcoin 6 Optimism 16 Parallel 7 Avalanche 17 Acala 8 Solana 18 Fusion 9 Mixin 19 Algorand 10 Kava 20 Osmosis CoinMarketCap “Largest Blockchains in Crypto Ranked by TVL” ΑΓҾ༻ https://coinmarketcap.com/ja/chain-ranking/ (2023/05/16) -
CoinMarketCap “Largest Blockchains in Crypto Ranked by TVL” ΑΓҾ༻ https://coinmarketcap.com/ja/chain-ranking/
(2023/05/16) ϒϩοΫνΣʔϯͷTLV(ϩοΫ͞Ε͍ͯΔ҉߸ࢿ࢈ͷֹ)ʹΑΔϥϯΩϯά ϒϩοΫνΣʔϯࣗମͷ։ൃݴޠ ॱҐ νΣʔϯ ϝΠϯݴޠ ॱҐ νΣʔϯ ϝΠϯݴޠ 1 Ethereum Go 11 Fantom Go 2 Tron Java 12 Cronos Go 3 BSC Go 13 DefiChain C++ 4 Arbitrum Go 14 Klaytn Go 5 Polygon Go 15 Bitcoin C++ 6 Optimism Go 16 Parallel Rust 7 Avalanche Go 17 Acala Rust 8 Solana Rust 18 Fusion C++ 9 Mixin Go 19 Algorand C, Go 10 Kava Go 20 Osmosis Go -
• EthereumͷϝΠϯͷ։ൃݴޠʹબΕͨ͜ͱ͕ىҼ͍ͯ͠Δ • EthereumεϚʔτίϯτϥΫτΛ ॳΊͯϒϩοΫνΣʔϯʹΈࠐΜͩࣄྫ • Ethereumͷ࠷ॳͷΫϥΠΞϯτ࣮ͷ1ͭͰ Go ͕બΕͨ •
go-ethereum Ethereum ωοτϫʔΫͷ 80%Ҏ্ͷϊʔυͰར༻͞Ε͍ͯΔ • ࠷ΘΕςετ͞ΕͨΫϥΠΞϯτͱͯ͠ɺ ଟ͘ͷνΣʔϯͷࢀߟ࣮ʹͳ͍ͬͯΔ Go͕ϒϩοΫνΣʔϯࣗମͷ։ൃʹΘΕ͖ͯͨཧ༝ -
ϒϩοΫνΣʔϯ։ൃͷཁٻʹԠ͑Δݴޠͩͬͨ • ίϯύΠϧݴޠͰɺ࣮ߦ͕͍ • ฒྻॲཧͷੑೳ͕ߴ͘ɺ࣮αϙʔτ͕ڧྗ ◦ ࢄγεςϜͱੑ͕ߴ͍ • ϝϞϦ҆શੑ͕ߴ͘ɺݎ࿚ੑͷߴ͍ίʔυΛҡ࣋Ͱ͖Δ ◦
ۚ༥ϓϥοτϑΥʔϜͷͨΊݎ࿚ੑॏཁ • ඪ४ͷ҉߸ϥΠϒϥϦ͕ॆ࣮ Ethereumͷ։ൃʹGo͕ΘΕ͖ͯͨཧ༝ -
Ethereumͷ։ൃʹGo͕ΘΕ͖ͯͨཧ༝ • RustϒϩοΫνΣʔϯ։ൃͷཁٻʹԠ͑Δݴޠ͕ͩɺ ։ൃ։࢝࣌ͰRustͷਖ਼ࣜϦϦʔε͕·ͩͩͬͨ ◦ ։ൃ͕࢝·ͬͨͷ͕2013-14͋ͨΓ(init commit ͕ 2013-12-26) ◦
Gov1.2͕ϦϦʔε͞Ε͍ͯͨ ◦ Rustͷv1ϦϦʔε 2015/05/15 • ࣮ࡍʹ৽ڵνΣʔϯͰ Rust͕ϝΠϯͷ։ൃʹΘΕΔγʔϯ૿͍͑ͯΔ -
• EthereumޓͷνΣʔϯͳͲɺEthereumࢿݯ͕༗ޮ׆༻Ͱ͖Δ߹ ◦ RustEthereumΫϥΠΞϯτ͕࣮͞ΕͨΓͳͲͰɺࢿݯ͕ཷ·Γͭͭ͋Δ • ։ൃݴޠͷֶशίετΛ͍ͨ͘͠߹ • ݴޠͰύϑΥʔϚϯεΛγϏΞʹಥ͖٧Ίͳͯ͘ྑ͍߹ ͳͲ͕ͯ·Δ߹GoΛ͏ϝϦοτ͕େ͖͍ ϒϩοΫνΣʔϯωοτϫʔΫͷ݈શੑͷͨΊʹɺ
ΫϥΠΞϯτ࣮ͷଟ༷ੑ͕ॏཁࢹ͞Ε͍ͯΔ ଟ༷ͳݴޠͷΤίγεςϜͷ͕ඞཁʹͳΔ ࠓޙGoΘΕଓ͚Δͷ͔ -
΄ͱΜͲͷ໘Ͱɺར༻࣮ͷଟ͍ϥΠϒϥϦ͕ར༻͞Ε͍ͯΔ ʢϓϦίϯύΠϧυίϯτϥΫτͷ҉߸ԽؔͳͲɺҰ෦ಠࣗʹ࣮͞Ε͍ͯΔͷ ͋Δʣ • ඪ४ύοέʔδ crypto • ४ඪ४ύοέʔδ golang.org/x/crypto •
BitcoinͷGo࣮ύοέʔδ btcsuite/btcd, bitcoin-core/secp256k1 ࣮ͷ͋ΔϥΠϒϥϦΛ࠶ར༻͢Δ͜ͱͰɺ ҆શੑੑೳͱɺ։ൃ༰қੑΛཱ͍྆ͯ͠Δ ࣮ࡍʹͲͷΑ͏ʹGo͕ΘΕ͍ͯΔͷ͔ ҉߸ٕज़ͷ࣮ݱํ๏ ৄࡉͪ͜Βˠ -
Goͷ۩ମతͳΘΕํ ౬ਫͷΑ͏ʹΘΕΔgoroutine go-ethereumͰɺGoͷΰϧʔνϯͱνϟωϧ͕๛ʹΘΕ͍ͯΔ ֤छΠϕϯτΛ chan Ͱఆٛ͠ɺfor, select ΛͬͯΠϕϯτϋϯυϥΛ࣮ݱ ͜ͷύλʔϯ͕ΘΕ͍ͯΔՕॴ •
P2Pαʔόʔ https://github.com/ethereum/go-ethereum/blob/v1.11.6/p2p/server.go#L705 • Transactionͷϓʔϧ https://github.com/ethereum/go-ethereum/blob/v1.11.6/core/txpool/txpool.go#L349 • ϚΠχϯάϫʔΧʔ https://github.com/ethereum/go-ethereum/blob/v1.11.6/miner/worker.go -
sync ύοέʔδͷػೳଟ༻ ྫɿϒϩοΫϋογϡͷಋग़ʹར༻͢ΔϋογϡؔͷϩδοΫ • x/crypto/sha3 ͷ NewLegacyKeccak256() Λ͍ͬͯΔ • sync.Pool
Ͱ buffer Λ Ωϟογϡ͠ ࠶ར༻͢Δ͜ͱͰɺ GCͷෛ୲Λܰݮ͍ͯ͠Δ Goͷ۩ମతͳΘΕํ ౬ਫͷΑ͏ʹΘΕΔgoroutine https://github.com/ethereum/go-ethereum/blob/v1.11.6/cmd/geth/main.go#L331-L346 -
ϒϩοΫνΣʔϯͷσʔλߏcore/ blockchain.go ʹ࣮͞Ε͍ͯΔ https://github.com/ethereum/go-ethereum/blob/v1.11.6/core/ blockchain.go#L168-L227 ҎԼΛfieldʹॴ࣋ • ࣮ମΛอଘ͢Δσʔλϕʔε • ֤छΩϟογϡ
• ϒϩοΫͷݕূʹඞཁͳม Goͷ۩ମతͳΘΕํ ϒϩοΫνΣʔϯͷσʔλߏ -
ϒϩοΫϔομʔͷΞυϨεͷΩϟογϡʹ Go1.19~ ʹՃ͞Εͨsync/ atomic.Pointer (ඪ४ύοέʔδॳͷgenerics) ͕ར༻͞Ε͍ͯΔ Goͷ۩ମతͳΘΕํ ϒϩοΫνΣʔϯͷσʔλߏ ෳࡶͳσʔλͷΩϟογϡʹɺ
genericsΛͬͯಠ࣮ࣗͨ͠ Key-value store Λ׆༻ -
• prysmaticlabs/prysm ◦ EthereumͷίϯηϯαεΫϥΠΞϯτͷGo࣮ ◦ Ethereumgo-ethereumͷ֎ͰϒϩοΫੜͷίϯηϯαεΛܗ͍ͯ͠Δ • 0xPolygonHermez/zkevm-node ◦ zkEVMͷGoͷϊʔυ࣮
◦ θϩࣝূ໌ΛͬͯEthereumͷ֎෦ͰτϥϯβΫγϣϯΛॲཧ͢ΔϨΠϠʔ2νΣʔϯ • cosmos/cosmos-sdk ◦ ϒϩοΫνΣʔϯΛߏங͢ΔͨΊͷϞδϡϥʔϑϨʔϜϫʔΫ ◦ GoݴޠͰϒϩοΫνΣʔϯΞϓϦέʔγϣϯΛ؆୯ʹߏஙͰ͖Δ • ava-labs/avalanchego ◦ AvalancheνΣʔϯͷGoͷϊʔυ࣮ ◦ Avalanche subnetͱݺΕΔɺෳͷϒϩοΫνΣʔϯΛ࿈ܞͤͯ͞ ૬ޓӡ༻ੑʢΠϯλʔΦϖϥϏϦςΟʣΛ୲อ͢ΔΈ͕͋Δ Goͷ۩ମతͳΘΕํ ͦͷଞίʔυϦʔσΟϯά͕໘നͦ͏ͳrepository -
࠷ޙʹ • 6݄15() 19:00͔Βɺ ʰϚωʔϑΥϫʔυʱʰΧϯϜʱ ʰϛϥςΟϒʱʰφϨοδϫʔΫʱ ͷ4ࣾʹΑΔGoಉษڧձΛ։࠵༧ఆ On Thursday, June
15th at 7:00 PM, there will be a Go study group held by four companies: Money Forward, Kamu, Mirrativ, and Knowledge Work. • ඇެࣜAfter Partyͱͯ͠ɺ ֤ࣾͷΤϯδχΞ͕LTͱ Go ConferenceײઓΛ࣮ࢪ As an unofficial after party, engineers from each company will hold an LT and a discussion on the Go Conference. -
• Ethereum։ൃυΩϡϝϯτ https://ethereum.org/ja/developers/docs/ • Ethereum EVM illustrated https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf • Bitcoin
white paper https://bitcoin.org/bitcoin.pdf • Total Value Locked (TVL) Definition (coinmarketcap) https://coinmarketcap.com/alexandria/glossary/total-value-locked-tvl • ͨͩͷࢄDBͱԿ͕ҧ͏ʁ࠷લઢΤϯδχΞ͕ޠΔBlockchainͷ࣮༻Մೳੑ https://www.youtube.com/watch?v=UQUfpUPz9Ic Gopher Illustrations ©tottie / Renée French ࢀߟจݙ