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.
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.
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.
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
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
Ùghdar Pavel Kondratenkov, eòlaiche Ethereum
Source: www.habr.com