Mar a cho-dhùineas tu seòladh cùmhnant snasail mus tèid a chleachdadh: a ’cleachdadh CREATE2 airson iomlaid crypto

Cha bhith cuspair blockchain a-riamh na thùs chan e a-mhàin a h-uile seòrsa hype, ach cuideachd beachdan a tha glè luachmhor bho shealladh teicneòlach. Mar sin, cha deach e seachad air luchd-còmhnaidh a’ bhaile ghrianach. Bidh daoine a 'coimhead gu dlùth, a' sgrùdadh, a 'feuchainn ris an eòlas aca ann an tèarainteachd fiosrachaidh traidiseanta a ghluasad gu siostaman blockchain. Gu ruige seo, tha e air fhaicinn: faodaidh aon de na leasachaidhean aig Rostelecom-Solar sgrùdadh a dhèanamh air tèarainteachd bathar-bog stèidhichte air blockchain. Agus air an t-slighe, bidh cuid de bheachdan ag èirigh mu bhith a’ fuasgladh dhuilgheadasan gnìomhaichte coimhearsnachd blockchain. Aon de na hacks beatha sin - mar a cho-dhùineas tu seòladh cùmhnant snasail mus tèid a chleachdadh a ’cleachdadh CREATE2 - an-diugh tha mi airson a roinn leat fon ghearradh.

Mar a cho-dhùineas tu seòladh cùmhnant snasail mus tèid a chleachdadh: a ’cleachdadh CREATE2 airson iomlaid crypto
Chaidh an opcode CREATE2 a chuir ris ann am forc cruaidh Constantinople air 28 Gearran am-bliadhna. Mar a chaidh a ràdh san EIP, chaidh an còd op seo a thoirt a-steach gu sònraichte airson seanalan stàite. Ach, chleachd sinn e gus fuasgladh fhaighinn air duilgheadas eile.

Tha luchd-cleachdaidh le cothromachadh air an iomlaid. Feumaidh sinn seòladh Ethereum a thoirt do gach neach-cleachdaidh far am faod duine comharran a chuir, agus mar sin ag ath-lìonadh a’ chunntas aca. Canaidh sinn na seòlaidhean sin “wallets”. Nuair a thig comharran a-steach do wallets, feumaidh sinn an cur gu aon wallet (hotwallet).

Anns na h-earrannan a leanas, bidh mi a’ sgrùdadh roghainnean airson an duilgheadas seo fhuasgladh às aonais CREATE2 agus innsidh mi dhut carson a thrèig sinn iad. Mura h-eil ùidh agad ach anns an toradh deireannach, gheibh thu e san roinn “Fuasgladh Deireannach”.

Seòlaidhean Ethereum

Is e am fuasgladh as sìmplidh seòlaidhean ùra Ethereum a ghineadh airson luchd-cleachdaidh ùr. Bidh na seòlaidhean sin na wallets. Gus comharran a ghluasad bho wallet gu hotwallet, feumaidh tu ainm a chuir ris a ’ghnothach le bhith a’ gairm a ’ghnìomh tar-chur () le iuchair phrìobhaideach a’ mhàileid bhon chùl.

Tha na buannachdan a leanas aig an dòigh-obrach seo:

  • tha e dìreach
  • tha cosgais gluasad comharran bho wallet gu hotwallet co-ionann ri cosgais gairm gnìomh tar-chur ()

Ach, cho-dhùin sinn an aghaidh an dòigh-obrach seo oir tha aon phrìomh dhuilgheadas ann: feumaidh tu na h-iuchraichean prìobhaideach a stòradh an àiteigin. Chan e a-mhàin gum faodar an call, ach feumaidh tu cuideachd ruigsinneachd air na h-iuchraichean sin a riaghladh gu faiceallach. Ma tha co-dhiù aon dhiubh ann an cunnart, cha ruig comharran neach-cleachdaidh sònraichte am wallet teth.

Mar a cho-dhùineas tu seòladh cùmhnant snasail mus tèid a chleachdadh: a ’cleachdadh CREATE2 airson iomlaid crypto

Cruthaich cùmhnant smart fa leth airson gach neach-cleachdaidh

Le bhith a’ cleachdadh cùmhnant snasail fa leth airson gach neach-cleachdaidh leigidh sin leat iuchraichean prìobhaideach a stòradh airson wallets air an fhrithealaiche. Canaidh an iomlaid ris a’ chùmhnant snasail seo gus na comharran a ghluasad chun hotwallet.

Trèig sinn am fuasgladh seo cuideachd, leis nach urrainn an seòladh wallet aige a shealltainn don neach-cleachdaidh gun a bhith a’ cleachdadh cùmhnant snasail (tha seo comasach dha-rìribh, ach ann an dòigh caran toinnte le eas-bhuannachdan eile air nach bruidhinn sinn an seo). Air an iomlaid, faodaidh neach-cleachdaidh na h-uimhir de chunntasan a chruthachadh a dh ’fheumas e, agus feumaidh gach fear a wallet fhèin. Tha seo a’ ciallachadh gum feum sinn airgead a chosg air cùmhnant a chleachdadh gun eadhon a bhith cinnteach gun cleachd an neach-cleachdaidh an cunntas seo.

Opcode CREATE2

Gus fuasgladh fhaighinn air duilgheadas an dòigh roimhe, chuir sinn romhainn an còd copaidh CREATE2 a chleachdadh. Leigidh CREATE2 leat an seòladh a dhearbhadh ro-làimh far am bi an cùmhnant snasail air a chleachdadh. Tha an seòladh air a thomhas a’ cleachdadh na foirmle a leanas:

keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]


, far a bheil:

  • seòladh - seòladh a’ chùmhnant snasail ris an canar CREATE2
  • salann - luach air thuaiream
  • init_còd - bytecode cùmhnant smart airson a chleachdadh

Bidh seo a’ dèanamh cinnteach gu bheil am bytecode a tha thu ag iarraidh anns an t-seòladh a bheir sinn don neach-cleachdaidh. A bharrachd air an sin, faodar a’ chùmhnant snasail seo a chleachdadh nuair a dh’ fheumas sinn. Mar eisimpleir, nuair a cho-dhùnas neach-cleachdaidh am wallet aca a chleachdadh airson a’ chiad uair.
Mar a cho-dhùineas tu seòladh cùmhnant snasail mus tèid a chleachdadh: a ’cleachdadh CREATE2 airson iomlaid crypto
A bharrachd air an sin, faodaidh tu seòladh cùmhnant smart obrachadh a-mach a h-uile uair an àite a stòradh oir:

  • seòladh anns an fhoirmle seasmhach, oir is e seo seòladh ar factaraidh wallet
  • salann — user_id hash
  • init_còd seasmhach leis gu bheil sinn a’ cleachdadh an aon wallet

Tuilleadh leasachaidhean

Tha aon eas-bhuannachd fhathast aig an fhuasgladh a bh ’ann roimhe: feumaidh tu pàigheadh ​​​​airson a’ chùmhnant snasail a chleachdadh. Ge-tà, faodaidh tu faighinn cuidhteas e. Gus seo a dhèanamh faodaidh tu an gnìomh a ghairm tar-chur ()agus an uairsin fèin-sgrios () ann an neach-togail wallet. Agus an uairsin thèid an gas airson a 'chùmhnant smart a chleachdadh a thilleadh.

A dh’ aindeoin creideas mòr-chòrdte, faodaidh tu cùmhnant snasail a chuir chun aon sheòladh grunn thursan leis an opcode CREATE2. Tha seo air sgàth gu bheil CREATE2 a’ dèanamh cinnteach gur e neoni an seòladh targaide (tha an luach “1” air a shònrachadh aig toiseach an neach-togail). Anns a 'chùis seo, an gnìomh fèin-sgrios () ag ath-shuidheachadh seòlaidhean nonce a h-uile uair. Mar sin ma chuireas tu fòn gu CREATE2 a-rithist leis na h-aon argamaidean, thèid an sgrùdadh neo-eisimeileach seachad.

Thoir an aire gu bheil am fuasgladh seo coltach ris an roghainn seòladh Ethereum, ach às aonais feum air iuchraichean prìobhaideach a stòradh. Tha cosgais gluasad airgead bho wallet gu hotwallet timcheall air co-ionann ris a’ chosgais airson gnìomh a ghairm tar-chur (), leis nach bi sinn a’ pàigheadh ​​​​airson cleachdadh cùmhnant snasail.

Co-dhùnadh deireannach

Mar a cho-dhùineas tu seòladh cùmhnant snasail mus tèid a chleachdadh: a ’cleachdadh CREATE2 airson iomlaid crypto

Air ullachadh bho thùs le:

  • gnìomh airson salann fhaighinn user_id
  • cùmhnant snasail a chuireas fios gu opcode CREATE2 leis an t-salann iomchaidh (ie factaraidh wallet)
  • wallet bytecode a fhreagras ris a’ chùmhnant leis an neach-togail a leanas:

constructor () {
    address hotWallet = 0x…;
    address token = 0x…;
    token.transfer (hotWallet, token.balanceOf (address (this)));
    selfdestruct (address (0));
}


Airson gach neach-cleachdaidh ùr bidh sinn a’ sealltainn an seòladh màileid aige le àireamhachadh

keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]


Nuair a ghluaiseas neach-cleachdaidh comharran chun t-seòladh wallet co-fhreagarrach, chì ar backend tachartas gluasaid leis a’ pharamadair _gu, co-ionann ris an t-seòladh wallet. Aig an ìre seo, tha e comasach mar-thà cothromachadh an neach-cleachdaidh àrdachadh air an iomlaid mus cuir thu a-steach am wallet.

Nuair a chruinnicheas seòladh wallet àireamh gu leòr de chomharran, is urrainn dhuinn uile a ghluasad gu hotwallet aig an aon àm. Gus seo a dhèanamh, tha an backend a’ gairm gnìomh factaraidh cùmhnant smart, a bhios a’ coileanadh nan gnìomhan a leanas:

function deployWallet (соль uint256) {
    bytes memory walletBytecode =…;
    // invoke CREATE2 with wallet bytecode and salt
}


Mar sin, canar neach-togail cùmhnant smart wallet, a ghluaiseas a h-uile comharran gu seòladh hotwallet agus an uairsin fèin-sgrios.

Gheibhear an còd slàn an seo. Thoir an aire nach e seo an còd riochdachaidh againn, oir chuir sinn romhainn an wallet bytecode a bharrachadh agus sgrìobh sinn e ann an opcodes.

Ùghdar Pavel Kondratenkov, eòlaiche Ethereum

Source: www.habr.com

Cuir beachd ann