Mokhoa oa ho tseba aterese ea konteraka e bohlale pele o romelloa: sebelisa CREATE2 bakeng sa phapanyetsano ea li-crypto

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.

Mokhoa oa ho tseba aterese ea konteraka e bohlale pele o romelloa: sebelisa CREATE2 bakeng sa phapanyetsano ea li-crypto
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.

Mokhoa oa ho tseba aterese ea konteraka e bohlale pele o romelloa: sebelisa CREATE2 bakeng sa phapanyetsano ea li-crypto

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.
Mokhoa oa ho tseba aterese ea konteraka e bohlale pele o romelloa: sebelisa CREATE2 bakeng sa phapanyetsano ea li-crypto
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

Mokhoa oa ho tseba aterese ea konteraka e bohlale pele o romelloa: sebelisa CREATE2 bakeng sa phapanyetsano ea li-crypto

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 mona. Ka kopo hlokomela hore sena ha se khoutu ea rona ea tlhahiso, kaha re nkile qeto ea ho ntlafatsa sepache sa bytecode le ho e ngola ka li-opcode.

Mongoli Pavel Kondratenkov, setsebi sa Ethereum

Source: www.habr.com

Eketsa ka tlhaloso