Me yasa swaps atomic ba su da kyau da kuma yadda tashoshi zasu taimaka musu, menene muhimman abubuwan da suka faru a cikin Constantinople hard cokali mai yatsa da abin da za ku yi lokacin da ba ku da wani abu don biyan kuɗin gas.
Babban dalili na kowane ƙwararren tsaro shine sha'awar guje wa alhakin.
Providence ya kasance mai jinƙai, na bar ICO ba tare da jiran ma'amala ta farko da ba za ta iya canzawa ba, amma nan da nan na sami kaina na haɓaka musayar crypto.
Ba shakka ni ba Malkish Kibalchish ba ne, kuma kallon mugun kallo ɗaya ya ishe ni in ba da dukkan maɓallai da kalmomin shiga. Saboda haka, babban burina a matsayina na mai zanen gine-gine shi ne sanya ja-ja-jaja mai zafi na cryptanalysis kamar yadda zai yiwu daga abubuwan abubuwan more rayuwa da nake so.
Ba makullin ku ba, ba matsalolin ku ba
Muna gina tsarin musayar kadari kuma muna so mu kawar da matsakaicin ajiya na waɗannan kadarorin, amma dole ne mu tabbatar da tsaro na ma'amala.
Kuna iya aiki a matsayin alkali a cikin yanayi mai rikitarwa kuma ku gudanar da ma'amaloli tare da walat ɗin da ke buƙatar sa hannu biyu cikin uku: mai siye, mai siyarwa da escrow.
Koyaya, idan ɗan takarar ya sami nasarar kai hari kan escrow, to ya karɓi sa hannun biyu da ake buƙata.
Atomic musanyawa makirci ne na musanya inda mai garantin kwangila ne mai wayo wanda ke ba da damar halayya ta gaskiya kawai.
Kamar dai a cikin kacici-kacici game da kerkeci, akuya da kabeji, za ku iya yin aiki bisa ga yanayin da ya dace kawai kuma ku sha asara idan kun bijire daga gare ta.
Sai kawai a maimakon dabbobi masu banƙyama, ana ba da oda ta hanyar aikin hash wanda yana da wuyar samun karo wanda bai cancanci farawa ba.
Mataki na daya: kacici-kacici
A ce Alice wata safiya mai kyau tana so ta ba Bob bitcoin don dintsi na "crypto-yuan".
- Ta yi wani babban sirri
- Yana samun zanta daga gare ta
- Canja wurin bitcoins zuwa kwangila mai wayo, daga abin da Bob zai iya cire kuɗi ta hanyar gabatar da sirri (dole ne hash ɗin sa ya zama daidai da abin da aka ƙayyade a cikin kwangilar)
- Idan Bob bai fito don bitcoins da maraice ba, Alice na iya mayar da su kanta.
Mataki na biyu: bat
Bob ya shiga cikin wasa kuma yana tura "crypto-euro" zuwa kwangilarsa, wanda aka rubuta ta hanyar:
- Alice na iya cire "crypto-yens" ta hanyar gabatar da lambar sirri
- Ba kafin abincin rana ba, Bob na iya dawo da ajiyar kuɗi idan Alice ta kasa nunawa.
Mataki na uku: amsar tana cikin koto
Alice ta zo neman kuɗinta kuma ta karɓi kuɗin daga kwangilar Bob, ta tona asirinta a cikin aikin.
Mataki na ƙarshe: an warware kaciyar
Bob ya ga cinikin, kuma da idon gaggafa ya zana asirin da Alice ta gabatar wa kwangilar. Yana amfani da wannan sirrin don dawo da bitcoins.
Lokacin da abubuwa ba daidai ba
Idan Alice ba zato ba tsammani ya zama mai mutuwa, Bob yana ɗaukar yuan ɗin sa a abincin rana.
Bi da bi, Alice ya dawo da bitcoin da maraice idan mayaudarin Bob ya yanke shawarar riƙe kuɗin har sai mafi kyawun lokuta.
Idan kun fi son hoto da rubutu, Habré yana da ƙarin cikakkun bayanai da na gani a gare ku. .
Bambance-bambancen da ke tsakanin lokacin da aka tsara an tsara shi ne don tabbatar mana da muguwar Alice, wacce ke karɓar kuɗin Bob a ƙarshe, kuma lokacin ƙarewar ya ƙare yayin da ya shiga cikin ma'amala tare da yatsu masu rawar jiki.
Mahalarta ba za su iya rasa kuɗinsu ba; aƙalla, za su jira dawo da kuɗi.
Tallafin blockchainWannan tsari ne mai sauƙi wanda ke buƙatar komai kwata-kwata daga hulɗar blockchain:
- Taimako don kwangiloli masu wayo tare da aƙalla reshe ɗaya
- Dukansu blockchain dole ne su goyi bayan algorithms hashing iri ɗaya (tuna don bincika tsawon sirrin)
- Makullin lokaci.
Da farko kallo, ya riga ya yiwu a ce ga musayar hannun jari "lafiya, taronmu kuskure ne," amma ba haka lamarin yake ba.
Don duk fa'idodin su, mafita na musanyar atomatik ba sa sha'awar yawan kuɗin su. Mafi yawa saboda a cikin mafi mashahuri BTC-USD biyu, ɓangaren fiat ba a cika alama ba.
Nasarar da USDT ta samu ya haifar da jimillar tsayayyen tsabar tsabar kudi a cikin tsarin ERC20 don kowane dandano, daga mafi yawan USDC zuwa mafi yawan algorithmic DAI.
Sabili da haka, don sauƙi, muna ƙara jayayya cewa Alice yana sayar da Bitcoins zuwa Bob don wasu alamun ERC20, kuma muna fata don sa'a na masu daidaitawa, tun da har yanzu muna da matsalolin fasaha da yawa.
Speed
Bitcoin da Ethereum ba su da sauri daidaiku, amma a nan dole ne mu jira farko don ajiya ɗaya tare da duk tabbatarwa, sannan na biyu.
Wannan duk saboda mahalarcin da ya san sirrin ya fara saka kuɗin, kuma abokin hamayya yana jiran ƙarshe sannan kawai ya canza sashinsa.
Bugu da ƙari, muna ma'amala da kadari mai saurin canzawa, don haka a wannan lokacin ƙimar na iya canzawa sosai, kuma canza yanayin ba ta da sauƙi.
Privacy
Duk wani musayar ya bar kayan tarihi akan duka blockchain. Mai lura da hankali zai iya lura da hashes iri ɗaya a cikin kwangiloli masu wayo kuma ya yanke hukunci mai ma'ana cewa an kammala ma'amala, daga abin da za a iya yanke shawara mai yawa daga ƙimar musanya zuwa haraji.
Lokacin da musayar hannun jari ya san al'amuran ku, ba shi da daɗi sosai, lokacin da kowa ya san game da shi, ba shi da daɗi sau biyu.
amfani
Babban mahimmanci na blockchain gabaɗaya da ether musamman. Bari mu ga irin motsin da mai siyarwa da mai siye za su yi.
Daga ra'ayi na mai siyarwa, komai yana da sauƙi: kawai kuna buƙatar canja wurin Bitcoin zuwa adireshin p2sh. Tare da ether, duk abin da yafi rikitarwa.
YarjejeniyarBari mu kalli matsakaicin kwangilar da aka yi akan Github don musanya:
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);
}
}
Tsanaki Kada ku yi amfani da wannan da sauran kwangila daga labarin a cikin samarwa, an rubuta su don dalilai na nunawa kawai. Musamman wannan.
- Dole ne Bob ya kira hanyar kwangilar alamar
approve, ba da kwangilar musanya damar shiga alamun sa - Bob yana ƙirƙirar musanya da kwangila ta amfani da hanyar
transferFromyana ɗaukar alamun mai aikawa zuwa adireshin ku - Alice in
withdrawya bayyana sirrin kuma kwangila ya kiratransfer
Yawancin wallets da musayar crypto ba sa goyan bayan approve Alamu, kuma saboda kyawawan dalilai.
Masu amfani da kansu sukan yi kuskure kuma kawai suna canja wurin alamu zuwa kwangilar, bayan haka alamun sun ɓace kawai. Abubuwan da ke kan Etherscan suna cike da makoki daga rashin tausayi.
Kuma don kiran kwangila, kuna buƙatar biya kwamiti a cikin ETH, wanda ke nufin duka mahalarta dole ne su adana shi kafin fara ciniki, kuma mutane kaɗan suna son yin wannan.
Mai riƙe gas
Kyakkyawan wuri don farawa shine cire rajistan mai aikawa a duk inda zai yiwu kuma ɗauka cewa muna da wanda ke fama da yawan kwangilar kiran gas ga duk masu shigowa.
Kwangilar haɓakawa
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-key kwangila da EIP 712
Kamar yadda muka sani, adireshin da ke kan iska yana iya zama kwangila, ko kuma yana iya zama batu, wato, maɓalli.
Babban aikin mabuɗin shine sanya hannu akan wasu saƙonni.
Za mu iya amfani da Bob-kwangilar a matsayin mai aikawa, wanda ke yin duk abubuwan da suka dace, bayan an fara bincika sa hannun Bob-key.
Yanzu, kowa zai iya ɗaukar nauyin kwamitin ɗan takara, amma wanda ya san maɓalli ne kawai ya yanke shawara.
Bob-kwangilar
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 yana da ma'auni don aiki tare da sa hannu na tsarin bayanai masu rikitarwa , za ku iya karanta ƙarin game da shi a ciki
Raba da cin nasara
Sau da yawa yanayin yanayin hacking na kwangilar Ethereum yayi kama da haka:
- Mahalarcin yana saka kuɗi a cikin kwangilar
- Sannan ya dauki kudaden
- Wani abu yana faruwa ba daidai ba
- Wanda ya kai harin yana karbar kudin akai-akai
Idan muka koma ga misalinmu na farko, wani abu yana faruwa ba daidai ba idan ka-cici-ka-cici ba komai ba ne na bytes.
Yadda ake satar miliyanƘirƙiri musanya tare da zanta 0x66687aadf862bd776c8fc18b8e9f8e20089714856ee233b3902a591d0d5f2925
Wannan shi ne sha256 daga 0x0000000000000000000000000000000000000000000000000000000000000000
Muna canja wurin sirrin kuma muna ɗaukar alamun mu
Muna sake watsawa kuma muna ɗaukar na wani, duk saboda 0 = 0
Ta hanyar ƙirƙirar kwangila daban don kowane ciniki, za mu iya ware kwangiloli a matakin EVM.
Amma ba haka ba ne: yanzu kowane ma'amala yana da adireshin kansa, wanda zaku iya canja wurin alamu daga kowane walat ko musayar.
Kwangilolin da aka watsar da ƙirƙira2
Amma yanzu ga kowane ma'amala dole ne mu ƙirƙira kwangila kuma jira mai siye don canja wurin aiki "crypto-finding" a can. A cikin tsarin "kwangiloli da safe, kuɗi da maraice", koyaushe akwai haɗari cewa mai siye zai faɗi, kuma an riga an kashe ether don ƙirƙirar kwangilar.
Shin zai yiwu a yi shi don ku sami kuɗi da safe da bytes da yamma?
Developers a cikin Constantinople wuya cokali mai yatsu ya kara da umarnin ƙirƙirar2, wanda ke haifar da sabon kwangila a adireshin ƙayyadaddun ƙayyadaddun bayanai
keccak256( 0xff ++ address ++ salt ++ keccak256(init_code))[12:]
Inda
- adireshin - factory kwangila adireshin
- gishiri - wasu adadi, ma'anar da za mu koya a cikin jerin na gaba
- init_code - kwangilar bytecode da sigogin ginin gini.
Masana'antaUmarnin yana aiki ne kawai ta hanyar haɗuwa, don haka masana'anta ya ɗan ban tsoro:
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);
}
}
Ana iya samun lambar kwangilar ku ta amfani da 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);
Saboda ƙayyadaddun tallafi a cikin ƙarfi, ana iya ƙididdige iskar gas don kwangila ba daidai ba saboda wasu dabaru na ether.
Yana da kyau musamman cewa idan akwai ƙarancin iskar gas, kwangilar ta rushe tare da kuskuren ciki, ba tare da bayar da rahoton cewa babu isasshen iskar gas ba, kamar yadda zaku yi tsammani.
Yanzu za mu iya canja wurin alamu zuwa kwangila ba tare da ƙirƙirar su a gaba ba, kuma har sai mun buga su a kan hanyar sadarwa, babu wanda zai yi la'akari da ainihin abin da kwangilar ke yi.
Hankaka ba zai fidda idon hankaka ba
A bayyane yake cewa mai sharhi na gaske, musamman wanda ya samu jari mai kyau wajen yakar makiya gwamnati da karkatar da kudade, ba za a hana shi da irin wadannan dabaru na yara ba, kuma bayan ya kirkiro kwangilar zai ci gaba da ganin zagon kasa.
Yadda za a hana hash daga nunawa?
Muna canja wurin musanya da kanta zuwa offchain: mahalarta suna musayar sa hannu don canja wuri zuwa kwangilar musanya, sannan asirin ya bayyana a asirce.
Mataki zuwa matakiAn ƙirƙiri “multisigs” guda biyu waɗanda za a iya fitar da kuɗi idan Alice da Bob suna da sa hannu.
Don hana kowane mahalarta daga yin layi ya zama bala'i, za mu ƙara daɗaɗɗen lokaci mai kyau.
Alice da Bob suna yin ajiya a layi daya
- Alice ta hango wani sirri kuma ta ba Bob hash na sirrin da sa hannun ma'amala wanda ke tura bitcoins zuwa adireshin musanya.
- Bob ya bai wa Alice sa hannu don janye alamu zuwa kwangilar musaya tare da ɓoyayyiyar zanta.
- Alice ta gaya wa Bob wani sirri.
A wannan lokacin, jituwa ta zo: duka Alice da Bob na iya kammala yarjejeniyar a kowane lokaci. A cikin irin wannan yanayi na abokantaka, za su iya musayar sa hannu don cire kuɗi zuwa adiresoshin ƙarshe.
Ga mai lura da waje, yana kama da kuɗin ya tafi ta hanyar kwangilar multisig 2-of-2.
Har ila yau, wannan makirci yana ba da damar bangarorin biyu su yi ajiya a lokaci guda, tun da asirin ya bayyana bayan duk tabbatarwa.
Level 2
Tun da za mu iya cire kuɗi zuwa adireshin ɗaya kuma ba buga wani tsaka-tsakin ciniki ba, babu abin da zai hana mu janye kudi zuwa adiresoshin da yawa da yin adadin matsakaicin matsakaici. Ba wai wannan shine saitin da ake buƙata don musayar ba, amma da zarar kun fara tattara musanyawa, yana da wuya a daina.
Yanzu Alice da Bob za su iya juyo da dukkan karfinsu. Misali, ƙididdige matsakaicin farashi ta atomatik ta hanyar musayar satoshi a sakan daya, ko kawai haɗa kai tsaye mai yin kasuwa da mai karɓar kuɗi.
Mataki zuwa mataki
- Mai siyarwa ya yi asirce kuma ya ba mai saye hash na sirrin da sa hannun ciniki inda aka tura wani ɓangare na kudaden zuwa adireshin musanya p2sh, sauran kuma an mayar da su zuwa adireshin mai siyarwa.
- Mai siye ya ƙaddamar da sa hannu yana barin alamun musanya da canji don aika zuwa adireshin mai karɓa.
- Mai sayarwa ya bayyana sirrin
- Tarihi ya sake maimaita kansa da sabon sirri, kuma baya ga musanya da canji, an ƙara cire abin da aka saya a baya zuwa adireshin mai siye kuma an riga an biya shi zuwa adireshin mai siyarwa.
Yanzu muna da damar yin ciniki mai sauri na p2p, babban abu shine kiyaye lokaci da rufe yarjejeniyar kafin lokacin ƙarewa.
Duk da haka, ta hanyar tweaking na kwangilolin mu kadan, za mu iya ba da tashoshi na mu dawwama, wanda zai sauƙaƙa a gare mu mu gina hanyar sadarwa.
Amma zamuyi magana akan hakan a kashi na gaba.
source: www.habr.com
