Sehlooho sa blockchain ha se khaotse ho ba mohloli oa eseng feela mefuta eohle ea hype, empa hape le mehopolo e bohlokoa haholo ho tloha ponong ea thekenoloji. Ka hona, ha ea ka ea feta baahi ba motse oo letsatsi le chabileng. Batho ba shebile haufi-ufi, ba ithuta, ba leka ho fetisetsa tsebo ea bona ea ts'ireletso ea litaba tsa setso ho litsamaiso tsa blockchain. Ho fihlela joale, e teng: e 'ngoe ea lintlafatso tsa Rostelecom-Solar e ka hlahloba ts'ireletso ea software e thehiloeng ho blockchain. 'Me tseleng, mehopolo e meng e hlaha mabapi le ho rarolla mathata a sebelisitsoeng a sechaba sa blockchain. E 'ngoe ea li-hacks tsena tsa bophelo - mokhoa oa ho tseba aterese ea konteraka e bohlale pele u romelloa u sebelisa CREATE2 - kajeno ke batla ho arolelana le uena tlas'a sehiloeng.
Opcode ea CREATE2 e kentsoe ferekong e thata ea Constantinople ka la 28 Hlakola selemong sena. Joalokaha ho boletsoe ho EIP, opcode ena e ile ea hlahisoa haholo-holo bakeng sa liteishene tsa mmuso. Leha ho le joalo, re ile ra e sebelisa ho rarolla bothata bo fapaneng.
Ho na le basebelisi ba nang le litekanyo ho phapanyetsano. Re tlameha ho fa mosebelisi e mong le e mong aterese ea Ethereum eo mang kapa mang a ka romellang li-tokens ho eona, kahoo a tlatsa akhaonto ea bona. Ha re bitse liaterese tsena "wallets". Ha li-tokens li fihla ka li-wallet, re tlameha ho li romela sepacheng se le seng (hotwallet).
Likarolong tse latelang, ke sekaseka likhetho tsa ho rarolla bothata bona ntle le CREATE2 mme ke u joetse hore na ke hobaneng re ba lahlile. Haeba u thahasella feela sephetho sa ho qetela, u ka se fumana karolong ea "Tharollo ea ho Qetela".
Liaterese tsa Ethereum
Tharollo e bonolo ka ho fetisisa ke ho hlahisa liaterese tse ncha tsa Ethereum bakeng sa basebelisi ba bacha. Liaterese tsena e tla ba li-wallet. Ho fetisetsa li-tokens ho tloha sepacheng ho ea ho hotwallet, o hloka ho saena transaction ka ho bitsa mosebetsi phetiso() ka senotlolo sa poraefete sa sepache se tsoang ka morao.
Mokhoa ona o na le melemo e latelang:
- ho bonolo
- litšenyehelo tsa ho fetisa li-tokens ho tloha sepacheng ho ea ho hotwallet li lekana le litšenyehelo tsa pitso ea mosebetsi phetiso()
Leha ho le joalo, re nkile qeto khahlanong le mokhoa ona hobane o na le tšitiso e le 'ngoe e kholo: o hloka ho boloka linotlolo tsa lekunutu kae-kae. Hase feela hore li ka lahleha, empa hape u lokela ho laola ka hloko ho fihlella linotlolo tsena. Haeba bonyane e 'ngoe ea tsona e sekiselitsoe, joale li-tokens tsa mosebedisi ea itseng li ke ke tsa fihla sepacheng se chesang.
Theha konteraka e bohlale e arohaneng bakeng sa mosebelisi e mong le e mong
Ho tsamaisa konteraka e bohlale e arohaneng bakeng sa mosebelisi e mong le e mong ho u lumella ho qoba ho boloka linotlolo tsa poraefete bakeng sa li wallet ho seva. Phapanyetsano e tla bitsa konteraka ena e bohlale ho fetisetsa li-tokens ho hotwallet.
Re boetse re lahlile tharollo ena, kaha mosebelisi a ke ke a bonts'oa aterese ea hae ea sepache ntle le ho fana ka konteraka e bohlale (sena se ka etsahala, empa ka tsela e rarahaneng le mefokolo e meng eo re ke keng ra e bua mona). Phapanyetsanong, mosebelisi a ka etsa li-account tse ngata kamoo a li hlokang, 'me e mong le e mong o hloka sepache sa hae. Sena se bolela hore re hloka ho sebelisa chelete ho tsamaisa konteraka ntle le ho netefatsa hore mosebelisi o tla sebelisa ak'haonte ena.
Opcode CREATE2
Ho lokisa bothata ba mokhoa o fetileng, re nkile qeto ea ho sebelisa opcode ea CREATE2. CREATE2 e u lumella ho tseba esale pele aterese eo konteraka e bohlale e tla romelloa ho eona. Aterese e baloa ka mokhoa o latelang:
keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]
, moo:
- aterese - aterese ea konteraka e bohlale e tla letsetsa CREATE2
- letsoai - boleng bo sa reroang
- init_code - konteraka e bohlale ea bytecode bakeng sa ho romelloa
Sena se tiisa hore aterese eo re e fang mosebelisi e hlile e na le bytecode eo u e batlang. Ho feta moo, konteraka ena e bohlale e ka sebelisoa neng kapa neng ha re e hloka. Mohlala, ha mosebelisi a etsa qeto ea ho sebelisa sepache sa hae ka lekhetlo la pele.
Ho feta moo, o ka bala aterese e bohlale ea konteraka nako le nako ho fapana le ho e boloka hobane:
- aterese ka mokhoa o tsitsitseng, kaha ena ke aterese ea fektheri ea rona ea sepache
- letsoai - user_id hash
- init_code ke kamehla kaha re sebelisa sepache se tšoanang
Lintlafatso tse ling
Tharollo e fetileng e ntse e na le tšitiso e le 'ngoe: o hloka ho lefa ho tsamaisa konteraka e bohlale. Leha ho le joalo, u ka e tlosa. Ho etsa sena o ka letsetsa tshebetso phetiso(), eaba selfdestruct() seahing sa sepache. 'Me joale khase ea ho tsamaisa konteraka e bohlale e tla khutlisoa.
Ho fapana le seo batho ba se lumelang, u ka sebelisa konteraka e bohlale atereseng e le 'ngoe hangata ka CREATE2 opcode. Lebaka ke hobane CREATE2 e hlahloba hore na sebaka sa aterese eo e lebisitsoeng ho eona ke zero (e filoe boleng "1" qalong ea sehahi). Tabeng ena, tshebetso selfdestruct() e tsosolosa liaterese tsa nonce nako le nako. Kahoo haeba u letsetsa CREATE2 hape ka likhang tse tšoanang, cheke ea nonce e tla feta.
Ka kopo hlokomela hore tharollo ena e tšoana le khetho ea aterese ea Ethereum, empa ntle le tlhokahalo ea ho boloka linotlolo tsa poraefete. Litsenyehelo tsa ho fetisetsa chelete ho tloha sepacheng ho ea ho hotwallet e batla e lekana le litšenyehelo tsa ho letsetsa mosebetsi phetiso(), kaha ha re lefelle phepelo e bohlale ea konteraka.
Qeto ea ho qetela
E lokisitsoe ke:
- mosebetsi oa ho fumana letsoai ka Theneketso
- konteraka e bohlale e tla letsetsa CREATE2 opcode ka letsoai le loketseng (ke hore feme ea mokotla)
- wallet bytecode e tsamaellanang le konteraka le moetsi ea latelang:
constructor () {
address hotWallet = 0x…;
address token = 0x…;
token.transfer (hotWallet, token.balanceOf (address (this)));
selfdestruct (address (0));
}
Bakeng sa mosebelisi e mong le e mong e mocha re bontša aterese ea sepache sa hae ka lipalo
keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]
Ha mosebelisi a fetisetsa li-tokens atereseng e lumellanang ea sepache, mokokotlo oa rona o bona ketsahalo ea Transfer e nang le parameter. _ho, e lekanang le aterese ea sepache. Ka nako ena, ho se ho ntse ho khoneha ho eketsa tekanyo ea mosebedisi ka phapanyetsano pele o romela sepache.
Ha aterese ea sepache e bokella palo e lekaneng ea li-tokens, re ka li fetisetsa kaofela hang-hang ho hotwallet. Ho etsa sena, backend e bitsa mosebetsi oa feme ea konteraka e bohlale, e etsang liketso tse latelang:
function deployWallet (соль uint256) {
bytes memory walletBytecode =…;
// invoke CREATE2 with wallet bytecode and salt
}
Ka hona, moetsi oa konteraka ea bohlale oa sepache o bitsoa, e fetisetsang li-tokens tsohle ho aterese ea hotwallet ebe e itšenyetsa.
Khoutu e felletseng e ka fumanoa
Mongoli Pavel Kondratenkov, setsebi sa Ethereum
Source: www.habr.com