Nei atomic swaps yakaipa uye kuti machani achavabatsira sei, ndezvipi zvinhu zvakakosha zvakaitika muConstantinople hard fork uye zvekuita kana usina chekubhadharira gasi.
Iko kukurudzira kukuru kwechero nyanzvi yekuchengetedza ndeyechido chekudzivisa mutoro.
Providence aive netsitsi, ndakasiya ICO ndisina kumirira yekutanga isingachinjiki kutengeserana, asi munguva pfupi ndakazviona ndave kugadzira crypto exchange.
Ini handisi Malkish Kibalchish, uye kutarisisa kumwe chete kwakakwana kuti ini ndipe makiyi ese nemapassword. Naizvozvo, chinangwa changu chikuru semugadziri wezvivakwa chaive chekuisa iyo tsvuku-inopisa sting yecryptanalysis kusvika pazvinobvira kubva kune zvivakwa zvezvivakwa zvandinoda kwandiri.
Kwete makiyi ako, kwete matambudziko ako
Isu tiri kuvaka hurongwa hwekutsinhana kweasset uye tinoda kubvisa kuchengetedza kwepakati kwezvinhu izvi, asi isu tinofanirwa kuve nechokwadi chekuchengetedza kwekutengeserana.
Iwe unogona kuita semutongi mune gakava uye kuita kutengeserana newallet inoda maviri evatatu masaini: mutengi, mutengesi uye escrow.
Nekudaro, kana mutori wechikamu akabudirira kurwisa escrow, anobva agashira masaini maviri anodiwa.
Atomic swap chirongwa chekutsinhana apo muchengeti ari kondirakiti yakangwara inobvumira maitiro akatendeseka chete.
Sokunge mune chirahwe nezve mhumhi, mbudzi uye kabichi, iwe unogona chete kuita zvinoenderana neiyo chete chaiyo mamiriro uye kutambura kurasikirwa kana iwe ukatsauka kubva pairi.
Chete panzvimbo yemhuka dzinotyisa, kurongeka kunopihwa nebasa rehashi umo zvakaoma kuwana kudhumhana zvekuti hazvina kukodzera kutanga.
Danho rokutanga: chirahwe
Ngatitii Alice mamwe mangwanani akanaka anoda kupa Bob bitcoin kwechitsama che "crypto-yuan".
- Ari kuita chakavanzika chikuru
- Inowana hashi kubva kwairi
- Inotamisa bitcoins kune smart kontrakiti, kubva iyo Bob anogona kubvisa mari nekupa chakavanzika (hashi yacho inofanira kuenzana neyakatsanangurwa muchibvumirano)
- Kana Bob akasaratidza mabitcoins ake manheru, Alice anogona kuzvidzosera kwaari.
Nhanho yechipiri: chirauro
Bob anouya uye anotamisa "crypto-euro" kuchibvumirano chake, icho chakanyorwa nenzira yekuti:
- Alice anogona kubvisa "crypto-yens" nekupa nhamba yakavanzika
- Kwete pamberi pekudya kwemasikati, Bob anogona kudzosera dhipoziti kana Alice akatadza kuoneka.
Danho rechitatu: mhinduro iri muchirauro
Alice anouya nemari yake uye anotora mari kubva muchibvumirano chaBob, achiburitsa chakavanzika chake mukuita.
Danho rekupedzisira: chirahwe chinopedzwa
Bob anoona kutengeserana, uye neziso rake regondo anobvisa kubva mairi chakavanzika chakaunzwa naAlice kuchibvumirano. Anoshandisa chakavanzika ichi kuti atore mabitcoins ake.
Kana zvinhu zvashata
Kana Alice akangoerekana ave munhu anofa, Bob anotora yuan yake pakudya kwemasikati.
Zvakare, Alice anodzorera bitcoin manheru kana Bob anonyengera akasarudza kubata mari kusvika nguva dziri nani.
Kana iwe uchida mufananidzo kutumira mameseji, Habré ane yakatsanangurwa uye inoonekwa imwe yako. .
Musiyano uripo pakati pekupedza nguva wakagadzirirwa kutipa inishuwarenzi isu kurwisa Alice ane hutsinye, anotora mari yaBob panguva yekupedzisira, uye nguva yekupera inopera iye achipinda muhekisi mukutengesa nezvigunwe zvinodedera.
Vatori vechikamu havagone kurasikirwa nemari yavo; zvakanyanya, vanozofanira kumirira kudzoserwa.
Blockchain rutsigiroIchi chirongwa chakareruka chisingadi chero chinhu kubva pakudyidzana blockchains:
- Tsigiro yezvibvumirano zvakangwara zvine rimwe bazi
- Ose ma blockchains anofanirwa kutsigira akafanana hashing algorithms (rangarira kutarisa chakavanzika kureba)
- Kuvhara nguva.
Pakutanga kuona, zvatove zvichibvira kutaura kune stock exchange "zvakanakai, musangano wedu wakanga uri kukanganisa," asi izvo zvakanga zvisina kudaro.
Nezvese zvakanakira, maatomu ekuchinjanisa mhinduro haafadze nehuwandu hwawo. Kunyanya nekuti mune inonyanya kufarirwa BTC-USD pair, iyo fiat chikamu chakanga chisina kuzara tokenized.
Kubudirira kweUSDT kwapa kusimuka kwese kwese kwemari yakagadzika muiyo ERC20 fomati yekuravira kwese, kubva kune yakanyanya kuchengetedza USDC kusvika kune yakanyanya algorithmic DAI.
Naizvozvo, kuti zvive nyore, isu tinoenderera mberi nekukakavara kuti Alice anotengesa Bitcoins kuna Bob kune mamwe ERC20 tokens, uye isu tinotarisira rombo rakanaka rezvitsigiso, sezvo tichine mamwe akawanda matambudziko ehunyanzvi.
Speed
Bitcoin neEthereum hazvina kukurumidza zvikuru mumwe nomumwe, asi pano tinofanira kumirira kutanga kune imwe dhipoziti nezvose zvinosimbisa, zvino zvechipiri.
Izvi zvese nekuti uyo ari kutora chikamu anoziva chakavanzika anotanga aisa mari, uye mupikisi anomirira yekupedzisira uye chete ipapo anotamisa chikamu chake.
Mukuwedzera, isu tiri kutarisana nechinhu chinotyisa zvikuru, saka panguva ino chiyero chinogona kuchinja zvakanyanya, uye kuchinja mamiriro acho hakusi nyore.
Kuvanzika
Chero kuchinjana kunosiya zvigadzirwa pane ese ma blockchains. Mucherechedzi anocherekedza anogona kuona ma hashes akafanana mumakondirakiti akangwara uye kuita mhedziso ine musoro yekuti kutengeserana kwapedzwa, kubva kubva pakawanda mhedziso dzinogona kutorwa kubva kumutengo wekuchinjana kune mutero.
Kana iyo stock exchange ichiziva nezvezvinhu zvako, hazvifadze zvakanyanya; kana munhu wese achiziva nezvazvo, hazvifadze zvakapetwa kaviri.
Usability
Iyo yakasimba poindi ye blockchain mune zvese uye ether kunyanya. Ngationei ma gestures achafanirwa kuitwa nemutengesi nemutengi.
Kubva pakuona kwemutengesi, zvese zviri nyore: iwe unongoda kuendesa Bitcoin kune p2sh kero. Ne ether, zvese zvakanyanya kuoma.
chibvumiranoNgatitarisei chibvumirano chakaverengerwa pamusoro peGithub chekuchinjana:
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);
}
}
Cherechedza chinyorwa! Usashandise izvi nezvimwe zvibvumirano kubva muchinyorwa mukugadzirwa, zvakanyorwa nekuda kwekuratidzira chete. Kunyanya uyu.
- Bob anofanira kudaidza nzira yekontrakiti yechiratidzo
approve, ichipa chibvumirano chekuchinjana kuwana kune zviratidzo zvayo - Bob anogadzira shanduko uye chibvumirano achishandisa nzira
transferFrominoendesa ma tokeni emutumwa kukero yako - Alice mukati
withdrawinoburitsa chakavanzika uye chibvumirano chinofonatransfer
Mazhinji wallet uye crypto exchanges haitsigire approve zviratidzo, uye nechikonzero chakanaka.
Vashandi pachavo vanowanzoita zvikanganiso uye vanongotamisa zviratidzo kune chibvumirano, mushure mezvo zviratidzo zvinongorasika. Maonero eEtherscan azere nekuchema kubva kune vasina rombo rakanaka.
Uye kuti udane kontrakiti, iwe unofanirwa kubhadhara komisheni muETH, izvo zvinoreva kuti vese vatori vechikamu vanofanirwa kuunganidza pairi vasati vatanga kutengeserana, uye vashoma vanhu vanoda kuita izvi.
Mubati wegesi
Nzvimbo yakanaka yekutanga kubvisa cheki yeanotumira pese pazvinogoneka uye tofunga kuti tine mumwe munhu ari kurwara negasi rakawandisa rekufona makondirakiti kune vese vanouya.
Kondirakiti yakakwidziridzwa
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);
}
}
Kondirakiti-kiyi mbiri mbiri uye EIP 712
Sezvatinoziva, kero pamhepo inogona kuva chibvumirano, kana inogona kuva nyaya, kureva, kiyi.
Basa guru rekiyi ndere kusaina mamwe mameseji.
Isu tinogona kushandisa iyo Bob-chibvumirano semutumi, iyo inoita zvese zvinodiwa kupfuura, kutanga tatarisa siginecha yeBob-kiyi.
Zvino, chero munhu anogona kutsigira komisheni yevatori vechikamu, asi uyo chete anoziva kiyi ndiye anoita sarudzo.
Bob-chibvumirano
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);
}
}
Ethereum ine chiyero chekushanda nemasiginecha ezvakaoma data zvimiro , unogona kuverenga zvakawanda nezvazvo mukati
Govanisa uye utonge
Kazhinji mamiriro ekubira chibvumirano cheEthereum anotaridzika seizvi:
- Mutori wechikamu anoisa mari muchibvumirano
- Anobva atora mari
- Pane chirikunetsa
- Anorwisa anotora mari zvakare uye zvakare
Kana tikadzokera kumuenzaniso wedu wekutanga, chimwe chinhu chinokanganisa kana chirahwe chisina chinhu seti yemabyte.
Kubira miriyoniGadzira shanduko nehashi 0x66687aadf862bd776c8fc18b8e9f8e20089714856ee233b3902a591d0d5f2925
Iyi sha256 kubva 0x0000000000000000000000000000000000000000000000000000000000000000
Isu tinotamisa chakavanzika uye tinotora zviratidzo zvedu
Isu tinotumira zvakare uye totora zvemumwe munhu, zvese nekuti 0 = 0
Nekugadzira kondirakiti yakaparadzana yekutengeserana kwega kwega, tinogona kupatsanura zvibvumirano padanho reEVM.
Asi handizvo chete: ikozvino kutengeserana kwega kwega kune kero yayo, kwaunogona kuendesa zviratidzo kubva kune chero chikwama kana kuchinjana.
Yakasiiwa zvibvumirano uye kugadzira2
Asi ikozvino pakutengeserana kwega kwega tinofanira kugadzira chibvumirano uye kumirira mutengi kutamisa basa "crypto-finding" ikoko. Mu "zvibvumirano mangwanani, mari manheru" chirongwa, pane nguva dzose njodzi yokuti mutengi achawa, uye ether yakatoshandiswa pakugadzira chibvumirano.
Zvinoita here kuzviita kuti uve nemari mangwanani uye mabheti manheru?
Vagadziri muConstantinople hard fork yakawedzera iyo create2 rairo, iyo inogadzira kondirakiti nyowani pane deterministic kero
keccak256( 0xff ++ address ++ salt ++ keccak256(init_code))[12:]
Kupi
- kero - fekitari chibvumirano kero
- munyu - imwe nhamba, zvinoreva zvatichadzidza munyaya inotevera
- init_code - chibvumirano bytecode uye muvaki paramita.
FactoryIwo murayiridzo unoshanda chete kuburikidza negungano, saka fekitori inotaridzika zvishoma inotyisa:
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);
}
}
Kodhi yako yekontrakiti inogona kuwanikwa uchishandisa 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);
Nekuda kwerutsigiro rushoma mukusimba, gasi rechibvumirano rinogona kuverengerwa zvisizvo nekuda kwehumwe hunyengeri hweether.
Zvinonyanya kunaka kuti kana paine kushayikwa kwegasi, kondirakiti inoputsika nekukanganisa kwemukati, pasina kuzivisa kuti pakanga pasina gasi rakakwana, sezvaungatarisira.
Iye zvino isu tinokwanisa kuendesa ma tokens kumakondirakiti tisina kuasika pamberi, uye kusvika taaburitsa panetiweki, hapana anofungidzira kuti kondirakiti inoitei chaizvo.
Gunguwo harizoroyi ziso regunguwo
Zviri pachena kuti muongorori chaiye, kunyanya uyo akagamuchira mari yakanaka mukurwisana nevavengi vehurumende nekutengesa mari, haazoregi nemaitiro akadaro emwana, uye mushure mekugadzira chibvumirano acharamba achiona hashi.
Nzira yekudzivirira sei kuti hashi irege kuratidzwa?
Isu tinoendesa shanduko yacho pachayo kune offchain: vatori vechikamu vanotsinhana masaini ekuendesa kune chibvumirano chekuchinjana, uye ipapo chakavanzika chinoburitswa pachivande.
Mbichana mbichanaMaviri "multisigs" anogadzirwa kubva mairi mari inogona kubviswa kana Alice naBob vakasaina.
Kudzivirira chero vevatori vechikamu kubva kuenda kunze kwenyika kuve dambudziko, isu tichawedzera yakanaka yekupedza nguva.
Alice naBob vanoita mari dzakafanana
- Alice anofungidzira chakavanzika uye anopa Bob hashi yechakavanzika uye siginecha yekutengeserana inoendesa bitcoins kukero yekuchinjana.
- Bob anopa Alice siginicha yekubvisa tokeni kuchibvumirano chekuchinjana nehashi yakavanzika.
- Alice anoudza Bob chakavanzika.
Panguva ino, kuwirirana kunouya: vese Alice naBob vanogona kupedzisa chibvumirano chero nguva. Mumamiriro ezvinhu ane hushamwari akadaro, vanogona kuchinjana masaini kuti vabvise mari kumakero ekupedzisira.
Kune mucherechedzi wekunze, zvinoita sekunge mari yakapinda muchibvumirano che2-of-2 multisig.
Ichi chirongwa chinobvumirawo mapato maviri kuita dhipoziti panguva imwe chete, sezvo chakavanzika chinoratidzwa mushure mezvisimbiso zvese.
Level 2
Sezvo isu tichigona kubvisa mari kune imwe kero uye tisingashambadzire kutengeserana kwepakati, hapana chinotitadzisa kubvisa mari kumakero akati wandei uye kuita nhamba isingagumi yekutengeserana kwepakati. Hazvirevi kuti iyi inodiwa seti yekutsinhana, asi kana watanga kuunganidza shanduko, zvakaoma kumira.
Iye zvino Alice naBob vachakwanisa kutendeuka nesimba ravo rose. Semuenzaniso, verenga otomatiki mutengo weavhareji nekuchinjana satoshi pasekondi, kana kungobatanidza zvakananga mugadziri wemusika uye mugamuchiri wemari.
Mbichana mbichana
- Mutengesi anoita chakavanzika uye anopa mutengi hashi yechakavanzika uye siginecha yekutengeserana uko chikamu chemari chinoendeswa kune p2sh swap kero, uye imwe yese inodzoserwa kukero yemutengesi.
- Mutengi anotumira siginicha inobvumira kuchinjanisa tokeni uye shanduko kutumirwa kukero yemugamuchiri.
- Mutengesi anoburitsa chakavanzika
- Nhoroondo inodzokorora pachayo nechakavanzika chitsva, uye kunze kwekuchinja uye kuchinja, kubviswa kwezvakambotengwa kune kero yemutengi uye yakatobhadharwa kune kero yemutengesi inowedzerwa.
Iye zvino tave nekuwana kwepamusoro-kumhanya p2p kutengesa, chinhu chikuru ndechekuchengeta nguva uye kuvhara chibvumirano nguva isati yapera.
Nekudaro, nekugadzirisa zvibvumirano zvedu zvishoma, tinogona kupa nzira dzedu kusafa, izvo zvinozoita kuti zvive nyore kwatiri kuvaka network.
Asi tichataura nezvazvo muchikamu chinotevera.
Source: www.habr.com
