Carson a tha suaipean atamach dona agus mar a chuidicheas seanalan iad, dè na rudan cudromach a thachair ann am forc cruaidh Constantinople agus dè a nĂŹ thu nuair nach eil dad agad ri phĂ igheadh ââââairson gas.
Is e prÏomh bhrosnachadh eòlaiche tèarainteachd sam bith am miann uallach a sheachnadh.
Bha Providence tròcaireach, dh'fhà g mi an ICO gun a bhith a 'feitheamh ris a' chiad ghnothach nach gabh a thoirt air ais, ach cha b 'fhada gus an do lorg mi mi fhÏn a' leasachadh iomlaid crypto.
Chan e Malchish Kibalchish a thâ annam gu cinnteach, agus tha aon shealladh geur gu leòr airson na h-iuchraichean agus na faclan-faire gu lèir a thoirt seachad. Mar sin, bâ e mo phrĂŹomh amas mar ailtire an gath dearg de cryptanalysis a chuir cho fada âs a ghabhas bho na h-eileamaidean bun-structair a bha dèidheil orm.
Chan e na h-iuchraichean agad, chan e na duilgheadasan agad
Tha sinn aâ togail siostam iomlaid so-mhaoin agus tha sinn airson cuir Ă s do stòradh eadar-mheadhanach de na maoinean sin, ach feumaidh sinn dèanamh cinnteach Ă tèarainteachd aâ ghnothaich.
Faodaidh tu a bhith nad bhritheamh ann an suidheachadh connspaideach agus gnothaichean a dhèanamh le wallets a dhâ fheumas dhĂ de thrĂŹ ainmean-sgrĂŹobhte: ceannaiche, neach-reic agus escrow.
Ach, ma bheir an com-pĂ irtiche ionnsaigh air an escrow gu soirbheachail, gheibh e an dĂ ainm-sgrĂŹobhte a tha a dhĂŹth.
Is e sgeama iomlaid a thâ ann an suaip atamach far a bheil an neach-urrais na chĂšmhnant snasail a leigeas le giĂšlan onarach a-mhĂ in.
Mar gum biodh tu ann an tòimhseachan mu mhadadh-allaidh, gobhar agus cĂ l, chan urrainn dhut ach a bhith ag obair a rèir an aon suidheachadh ceart agus a âfulang call ma dhâ fhalbhas tu bhuaithe.
Is ann dÏreach an à ite beathaichean borb, tha òrdugh air a thoirt seachad le gnÏomh hash anns a bheil e cho duilich tubaist a lorg nach fhiach tòiseachadh.
Ceum a h-aon: tòimhseachan
Osbarr gu bheil Alice aon mhadainn mhath ag iarraidh bitcoin a thoirt dha Bob airson dòrlach de âcrypto-yuanâ.
- Tha i aâ dèanamh dĂŹomhaireachd mòr
- Aâ faighinn hash bhuaithe
- A 'gluasad bitcoins gu cÚmhnant snasail, às an urrainn dha Bob airgead a tharraing air ais le bhith a' taisbeanadh dÏomhaireachd (feumaidh an hash dheth a bhith co-ionnan ris an fheadhainn a tha air a shònrachadh sa chÚmhnant)
- Mura nochd Bob airson na bitcoins aige san fheasgar, faodaidh Alice an toirt air ais thuice fhèin.
Ceum a dhĂ : biathadh
Bidh Bob aâ tighinn a-steach agus aâ gluasad âcrypto-euroâ chun chĂšmhnant aige, a tha sgrĂŹobhte ann an dòigh a tha:
- Faodaidh Alice âcrypto-yensâ a thoirt air falbh le bhith aâ taisbeanadh Ă ireamh dhĂŹomhair
- Gun a bhith nas trà ithe na lòn, faodaidh Bob an tasgadh a thilleadh mura h-eil Alice a 'nochdadh.
Ceum a trĂŹ: tha am freagairt anns a 'bhiadhadh
Bidh Alice a 'tighinn airson a cuid airgid agus a' toirt an airgid bho chÚmhnant Bob, a 'nochdadh a dÏomhaireachd sa phròiseas.
Ceum mu dheireadh: tha an tòimhseachan air fhuasgladh
Tha Bob aâ faicinn aâ ghnothaich, agus le a shĂšil iolaire tha e aâ toirt a-mach Ă s an dĂŹomhaireachd a thug Alice don chĂšmhnant. Bidh e a 'cleachdadh an dĂŹomhair seo gus na bitcoins aige a thoirt air ais.
Nuair a thèid cÚisean ceà rr
Ma thionndaidheas Alice gu h-obann gu bhith marbhtach, bheir Bob a yuan aig lòn.
Aig an aon Ă m, bidh Alice a 'tilleadh am bitcoin san fheasgar ma cho-dhĂšineas Bob cealgach an t-airgead a chumail gu amannan nas fheĂ rr.
Mas fheà rr leat dealbh na teacsa, tha fear nas mionaidiche agus nas lèirsinneach aig HabrÊ dhut. .
Tha an eadar-dhealachadh eadar amannan-ama air a dhealbhadh gus Ă rachas a thoirt dhuinn an-aghaidh Alice droch-rĂšnach, a bheir airgead Bob aig aâ mhionaid mu dheireadh, agus thig an Ăšine-ama gu crĂŹch fhad âs a thèid e a-steach don heics anns aâ ghnothach le corragan crith.
Chan urrainn do chom-pĂ irtichean an airgead aca a chall; aig aâ char as motha, feumaidh iad feitheamh ri ath-dhĂŹoladh.
Taic BlockchainIs e sgeama sĂŹmplidh a tha seo nach fheum dad idir bho bhith ag eadar-obrachadh blockchains:
- Taic airson cĂšmhnantan snasail le co-dhiĂš aon mheur
- Feumaidh an dà blockchain taic a thoirt do na h-aon algoirmean hashing (cuimhnich gun dèan thu sgrÚdadh air an fhad dÏomhair)
- Glasan-ama.
Aig a 'chiad sealladh, tha e comasach mar-thĂ a rĂ dh ris an t-iomlaid stoc "beannachd, b' e mearachd a bh 'anns a' choinneamh againn," ach cha robh sin fĂŹor.
Airson na buannachdan aca uile, chan eil fuasglaidhean suaip atamach aâ toirt buaidh air an leachtachd aca. Gu ĂŹre mhòr air sgĂ th anns a âphaidhir BTC-USD as mòr-chòrdte, cha robh am pĂ irt fiat lĂ n chomharran.
Tha soirbheachas USDT air leantainn gu tonn slĂ n de bhuinn sheasmhach ann an cruth ERC20 airson a h-uile blas, bhon USDC as seasmhaiche chun an DAI as algorithmic.
Mar sin, airson sÏmplidh, tha sinn ag argamaid gu bheil Alice a 'reic Bob bitcoins airson cuid de chomharran ERC20, agus tha sinn an dòchas gum bi an luchd-stà baill fortanach, oir tha mòran dhuilgheadasan teicnigeach againn fhathast.
Astar
Chan eil Bitcoin agus Ethereum gu math luath leotha fhèin, ach an seo feumaidh sinn feitheamh an toiseach airson aon tasgadh leis a h-uile dearbhadh, an uairsin airson an dà rna fear.
Tha seo uile air sgĂ th gu bheil an com-pĂ irtiche aig a bheil eòlas air an dĂŹomhair an-toiseach a âtasgadh an airgid, agus bidh an neach-dĂšbhlain aâ feitheamh ris a âcheann thall agus dĂŹreach an uairsin aâ gluasad a phĂ irt.
A bharrachd air an sin, tha sinn aâ dèiligeadh ri so-mhaoin gu math luaineach, agus mar sin rè na h-Ăšine seo faodaidh an ĂŹre atharrachadh gu mòr, agus chan eil e furasta na suidheachaidhean atharrachadh tuilleadh.
DĂŹomhaireachd
Bidh iomlaid sam bith aâ fĂ gail artifacts air an dĂ blockchain. Faodaidh neach-amhairc furachail mothachadh a dhèanamh air na h-aon hashes ann an cĂšmhnantan snasail agus co-dhĂšnadh loidsigeach a dhèanamh gu bheil gnothach air a chrĂŹochnachadh, Ă s an urrainnear mòran cho-dhĂšnaidhean a tharraing bho ĂŹre iomlaid gu cĂŹs.
Nuair a tha fios aig an t-iomlaid stoc mu do ghnothaichean, tha e air leth mĂŹ-thlachdmhor; nuair a tha fios aig a h-uile duine mu dheidhinn, tha e dĂ uair mĂŹ-thlachdmhor.
Cleachdalachd
Puing là idir blockchain san fharsaingeachd agus ether gu sònraichte. Feuch sinn a-mach dè na gluasadan a dh'fheumas an neach-reic agus an ceannaiche a dhèanamh.
Bho shealladh an neach-reic, tha a h-uile dad an Ïre mhath sÏmplidh: feumaidh tu dÏreach Bitcoin a ghluasad gu seòladh p2sh. Le ether, tha a h-uile dad tòrr nas duilghe.
CĂšmhnantBheir sinn sĂšil air aâ chĂšmhnant cuibheasach thairis air Github airson suaip:
contract iERC20 {
function totalSupply() public view returns (uint256);
function transfer(address receiver, uint numTokens) public returns (bool);
function balanceOf(address tokenOwner) public view returns (uint);
function approve(address delegate, uint numTokens) public returns (bool);
function allowance(address owner, address delegate) public view returns (uint);
function transferFrom(address owner, address buyer, uint numTokens) public returns (bool);
}
contract Swapper {
struct Swap {
iERC20 token;
bytes32 hash;
uint amount;
uint refundTime;
bytes32 secret;
}
mapping (address => mapping(address => Swap)) swaps;
function create(iERC20 token, bytes32 hash, address receiver, uint amount, uint refundTime) public {
require(swaps[msg.sender][receiver].amount == 0); // check is swap with given hash already exists
require(token.transferFrom(msg.sender, address(this), amount)); // transfer locked tokens to swap contract
swaps[msg.sender][receiver] = Swap(token, hash, amount, refundTime, 0x00); //create swap
}
function hashOf(bytes32 secret) public pure returns(bytes32) {
return sha256(abi.encodePacked(secret));
}
function withdraw(address owner, bytes32 secret) public {
Swap memory swap = swaps[owner][msg.sender];
require(swap.secret == bytes32(0));
require(swap.hash == sha256(abi.encodePacked(secret))); // swap exists
swaps[owner][msg.sender].secret = secret;
swap.token.transfer(msg.sender, swap.amount);
}
function refund(address receiver) public {
Swap memory swap = swaps[msg.sender][receiver];
require(now > swap.refundTime);
delete swaps[msg.sender][receiver];
swap.token.transfer(msg.sender, swap.amount);
}
}
Thoir aire! Na cleachd seo agus cÚmhnantan eile bhon artaigil ann an riochdachadh, tha iad sgrÏobhte airson adhbharan taisbeanaidh a-mhà in. Gu sònraichte am fear seo.
- Feumaidh Bob modh cĂšmhnant nan comharran a ghairm
approve, aâ toirt cothrom don chĂšmhnant suaip air na comharran aige - Bidh Bob aâ cruthachadh an suaip agus cĂšmhnant aâ cleachdadh an dòigh
transferFrombheir e comharran an neach a chuir chun t-seòladh agad - Alice ann
withdrawaâ nochdadh an dĂŹomhair agus na gairmean cĂšmhnanttransfer
Chan eil aâ mhòr-chuid de wallets agus iomlaidean crypto aâ toirt taic approve comharran, agus air adhbhar math.
Bidh luchd-cleachdaidh iad fhèin gu tric a 'dèanamh mhearachdan agus dÏreach a' gluasad comharran chun a 'chÚmhnant, agus às dèidh sin tha na comharran dÏreach air an call. Tha na beachdan air Etherscan là n de caoidh bhon fheadhainn mÏ-fhortanach.
Agus gus cĂšmhnant a ghairm, feumaidh tu coimisean a phĂ igheadh ââââann an ETH, a tha a âciallachadh gum feum an dĂ chom-pĂ irtiche stoc a chuir air mus tòisich iad air aâ ghnothach, agus chan eil mòran dhaoine airson seo a dhèanamh.
Neach-gleidhidh gas
Is e deagh Ă ite tòiseachaidh a bhith aâ toirt air falbh an t-seic neach-cuiridh far an gabh sin dèanamh agus gabhail ris gu bheil cuideigin againn a tha aâ fulang le cus cĂšmhnantan gairm gas airson a h-uile neach a thig a-steach.
CĂšmhnant air Ăšrachadh
contract Swapper {
struct Swap {
iERC20 token;
address receiver;
uint amount;
address refundAddress;
uint refundTime;
}
mapping (bytes32 => Swap) swaps;
function create(iERC20 token, bytes32 hash, address receiver, uint amount, address refundAddress, uint refundTime) public {
require(swaps[hash].amount == 0); // use hash once
require(token.transferFrom(msg.sender, address(this), amount));
swaps[hash] = Swap(token, receiver, amount, refundAddress, refundTime);
}
function withdraw(bytes memory secret) public {
bytes32 hash = sha256(secret);
Swap memory swap = swaps[hash];
require(swap.amount > 0);
delete swaps[hash];
swap.token.transfer(swap.receiver, swap.amount);
}
function refund(bytes32 hash) public {
Swap memory swap = swaps[hash];
require(now > swap.refundTime);
delete swaps[hash];
swap.token.transfer(swap.refundAddress, swap.amount);
}
}
Dualism prĂŹomh chĂšmhnant agus EIP 712
Mar a tha fios againn, faodaidh seòladh air an èadhar a bhith na chÚmhnant, no faodaidh e a bhith na chuspair, is e sin, iuchair.
Is e prĂŹomh obair na h-iuchrach cuid de theachdaireachdan a shoidhnigeadh.
Faodaidh sinn an cĂšmhnant Bob a chleachdadh mar neach-cuiridh, a nĂŹ a h-uile pas riatanach, Ă s deidh dhuinn ainm-sgrĂŹobhte Bob-key a sgrĂšdadh an-toiseach.
A-nis, faodaidh duine sam bith taic a thoirt do choimisean com-pĂ irtiche, ach is e dĂŹreach an neach aig a bheil fios an iuchair a nĂŹ an co-dhĂšnadh.
Bob-cĂšmhnant
library EIP712ProxyLibrary {
function hashCommand(address sender, iERC20 token, Swapper swapper, bytes32 hash, address receiver, uint amount, address refundAddress, uint refundTime) public view returns(bytes32);
}
contract ProxyBob {
address owner;
constructor(address _owner) public {
owner = _owner;
}
function createSwap(Swapper swapper, iERC20 token, bytes32 hash, address receiver, uint amount, address refundAddress, uint refundTime, uint8 v, bytes32 r, bytes32 s) public {
require(owner == ecrecover(EIP712ProxyLibrary.hashCommand(address(this), token, swapper, hash, receiver, amount, refundAddress, refundTime), v, r, s));
token.approve(address(swapper), amount);
swapper.create(token, hash, receiver, amount, refundAddress, refundTime);
}
}
Tha inbhe aig Ethereum airson a bhith ag obair le ainmean-sgrĂŹobhte de structaran dĂ ta iom-fhillte , faodaidh tu barrachd a leughadh mu dheidhinn ann an
Roinn agus ceannsachadh
Gu math tric tha an suidheachadh airson a bhith a 'slaodadh cĂšmhnant Ethereum a' coimhead mar seo:
- Bidh an com-pĂ irtiche aâ tasgadh airgead a-steach don chĂšmhnant
- An uair sin tha e a 'gabhail an t-airgead
- Tha rudeigin aâ dol ceĂ rr
- Bidh an neach-ionnsaigh aâ toirt an airgid a-rithist is a-rithist
Ma thèid sinn air ais chun chiad eisimpleir againn, thèid rudeigin ceà rr ma tha an tòimhseachan na sheata de bytes falamh.
Ciamar a goid milleanCruthaich suaip le hash 0x66687aadf862bd776c8fc18b8e9f8e20089714856ee233b3902a591d0d5f2925
Is e seo sha256 bho 0x0000000000000000000000000000000000000000000000000000000000000000
Bidh sinn a 'gluasad an dĂŹomhair agus a' gabhail ar comharran
Bidh sinn aâ tar-chuir a-rithist agus aâ toirt feadhainn cuideigin eile, uile air sgĂ th 0 = 0
Le bhith aâ cruthachadh cĂšmhnant air leth airson gach malairt, is urrainn dhuinn cĂšmhnantan a sgaradh aig ĂŹre EVM.
Ach chan e sin a h-uile cà il: a-nis tha a sheòladh fhèin aig gach gnothach, gus an urrainn dhut comharran a ghluasad bho wallet no iomlaid sam bith.
CÚmhnantan air an trèigsinn agus a chruthachadh2
Ach a-nis airson gach gnothach feumaidh sinn cĂšmhnant a chruthachadh agus feitheamh ris a âcheannaiche saothairâ lorg cryptoâ a ghluasad an sin. Anns an sgeama âcĂšmhnantan sa mhadainn, airgead san fheasgarâ, tha an-còmhnaidh cunnart ann gun tuit an ceannaiche dheth, agus chaidh an ether a chosg mu thrĂ th air cruthachadh aâ chĂšmhnant.
A bheil e comasach a dhèanamh gus am bi airgead agad sa mhadainn agus bytes san fheasgar?
Luchd-leasachaidh ann am forc cruaidh Constantinople chuir e ris an stiÚireadh create2, a chruthaicheas cÚmhnant Úr aig seòladh cinntiche
keccak256( 0xff ++ address ++ salt ++ keccak256(init_code))[12:]
CĂ ite
- seòladh - seòladh cÚmhnant factaraidh
- salann - cuid Ă ireamh, a 'ciallachadh a bhios sinn ag ionnsachadh anns an ath shreath
- init_code - cĂšmhnant bytecode agus crĂŹochan neach-togail.
An fhactaraidhChan obraich an stiĂšireadh ach tro cho-chruinneachadh, agus mar sin tha coltas beagan eagallach air an fhactaraidh:
contract Factory {
event Deployed(address addr, uint256 salt);
function create2(bytes memory code, uint256 salt) public {
address addr;
assembly {
addr := create2(0, add(code, 0x20), mload(code), salt)
}
emit Deployed(addr, salt);
}
}
Gheibhear an còd cĂšmhnant agad le bhith aâ cleachdadh web3:
const MyContract = new web3.eth.Contract(ABI, {})
const Ńode = MyContract.deploy({
data: BYTECODE,
arguments: contructorArgs
}).encodeABI();
const factory = new web3.eth.Contract(FACTORY_ABI, factoryAddress);
tx = factory.methods.create2(Ńode, salt);
Air sgĂ th taic cuibhrichte ann an solidity, dhâ fhaodadh gas airson cĂšmhnant a bhith air a thomhas gu ceĂ rr air sgĂ th beagan subtleties den ether.
Tha e gu sònraichte math ma bhios gainnead gas ann, gun tuit an cÚmhnant le mearachd a-staigh, gun a bhith ag aithris nach robh gas gu leòr ann, mar a bhiodh dÚil agad.
A-nis is urrainn dhuinn comharran a ghluasad gu cĂšmhnantan gun a bhith gan cruthachadh ro-lĂ imh, agus gus am foillsich sinn iad air an lĂŹonra, cha bhith duine aâ tomhas dè dĂŹreach a bhios an cĂšmhnant a âdèanamh.
Cha spĂŹon fitheach sĂšil feannag
Tha e soilleir nach tèid stad a chuir air fĂŹor mhion-sgrĂšdair, gu sònraichte fear a fhuair deagh thasgaidhean anns an t-sabaid an aghaidh nĂ imhdean an rèim le airgead a âglaodhadh, le cleasan leanabhach mar sin, agus Ă s deidh dha aâ chĂšmhnant a chruthachadh chĂŹ e fhathast an hash.
Ciamar a chuireas tu casg air an hash bho bhith air a thaisbeanadh?
Bidh sinn aâ gluasad an suaip fhèin chun offchain: bidh com-pĂ irtichean ag iomlaid ainmean-sgrĂŹobhte airson gluasad gu cĂšmhnant suaip, agus an uairsin thèid an dĂŹomhaireachd fhoillseachadh gu prĂŹobhaideach.
Ceum air cheumTha dĂ âmultisigsâ air an cruthachadh Ă s an urrainnear airgead a tharraing air ais ma tha ainmean-sgrĂŹobhte aig Alice agus Bob.
Gus casg a chuir air gin de na com-pĂ irtichean bho bhith aâ dol far-loidhne gu bhith na bhròn-chluich, cuiridh sinn seann Ăšine seachad.
Bidh Alice agus Bob a 'dèanamh tasgaidhean ann an co-shÏnte
- Bidh Alice aâ tomhas dĂŹomhaireachd agus aâ toirt hash den dĂŹomhaireachd dha Bob agus ainm-sgrĂŹobhte malairt a ghluaiseas na bitcoins chun t-seòladh suaip.
- Bheir Bob ainm-sgrĂŹobhte do Alice gus comharran a tharraing air ais gu cĂšmhnant suaip le hash falaichte.
- Tha Alice ag innse dĂŹomhaireachd dha Bob.
Aig an à m seo, thig co-sheirm: faodaidh an dà chuid Alice agus Bob an aonta a chrÏochnachadh aig à m sam bith. Ann an à rainneachd cho cà irdeil, faodaidh iad ainmean-sgrÏobhte iomlaid gus airgead a tharraing air ais gu na seòlaidhean deireannach.
Do neach-amhairc bhon taobh a-muigh, tha e coltach gun deach an t-airgead tro chĂšmhnant multisig 2-of-2.
Tha an sgeama seo cuideachd aâ leigeil leis an dĂ phĂ rtaidh tasgadh a dhèanamh aig an aon Ă m, leis gu bheil an dĂŹomhaireachd air fhoillseachadh Ă s deidh a h-uile dearbhadh.
ĂŹre 2
Leis gun urrainn dhuinn airgead a tharraing air ais gu aon seòladh agus gun a bhith a 'foillseachadh malairt eadar-mheadhanach, chan eil dad a' cur bacadh oirnn bho bhith a 'tarraing airgead gu grunn sheòlaidhean agus a' dèanamh Ă ireamh neo-chuingealaichte de ghnothaichean eadar-mheadhanach. Chan e gur e seata riatanach a tha seo airson iomlaid, ach aon uair âs gun tòisich thu aâ cruinneachadh suaip, tha e duilich stad.
A-nis bidh e comasach dha Alice agus Bob tionndadh mun cuairt le an neart. Mar eisimpleir, gu fèin-obrachail obrachadh a-mach a 'phrÏs chuibheasach le bhith ag iomlaid satoshi gach diog, no dÏreach a' ceangal gu dÏreach an neach-dèanamh a 'mhargaidh agus an neach-faighinn leachtachd.
Ceum air cheum
- Bidh an neach-reic aâ dèanamh dĂŹomhaireachd agus aâ toirt hash den dĂŹomhaireachd don cheannaiche agus ainm-sgrĂŹobhte malairt far a bheil pĂ irt den airgead air a ghluasad gu seòladh suaip p2sh, agus an còrr air a thilleadh gu seòladh an neach-reic.
- Bidh an ceannaiche aâ cur a-steach ainm-sgrĂŹobhte a leigeas leis na comharran suaip agus atharrachadh a chuir gu seòladh an neach a gheibh e.
- Bidh an neach-reic aâ nochdadh an dĂŹomhaireachd
- Bidh eachdraidh ag ath-aithris le dĂŹomhaireachd Ăšr, agus a bharrachd air an iomlaid agus an atharrachadh, thathas aâ cur ris na chaidh a cheannach roimhe gu seòladh a âcheannaiche agus a chaidh a phĂ igheadh ââââmar-thĂ gu seòladh an neach-reic.
A-nis gu bheil cothrom againn air malairt p2p aig astar luath, is e am prĂŹomh rud sĂšil a chumail air an Ăšine agus an aonta a dhĂšnadh ron Ă m a-muigh.
Ach, le bhith aâ tweaking ar cĂšmhnantan beagan, is urrainn dhuinn neo-bhĂ smhorachd a thoirt dha na seanailean againn, a nĂŹ e fada nas fhasa dhuinn lĂŹonra a thogail.
Ach bruidhnidh sinn mu dheidhinn seo anns an ath phrògram.
Source: www.habr.com
