No ke aha i hewa ʻole ai nā swap atomic a pehea e kōkua ai nā kahawai iā lākou, he aha nā mea koʻikoʻi i hana ʻia ma Constantinople hard fork a me ka mea e hana ai inā ʻaʻohe āu e uku ai no ke kinoea.
ʻO ka manaʻo nui o kekahi loea palekana ka makemake e pale i ke kuleana.
Ua lokomaikaʻi ʻo Providence, haʻalele wau i ka ICO me ke kali ʻole i ka hana mua i hoʻololi ʻole ʻia, akā ua ʻike koke wau iaʻu e hoʻomohala i kahi hoʻololi crypto.
ʻAʻole wau ʻo Malchish Kibalchish, a hoʻokahi nānā koʻikoʻi ua lawa iaʻu e hāʻawi i nā kī āpau a me nā ʻōlelo huna. No laila, ʻo kaʻu pahuhopu nui ma ke ʻano he mea hoʻolālā ʻo ia ke kau ʻana i ka ʻulaʻula wela o ka cryptanalysis i kahi mamao loa mai nā mea ʻenehana aloha iaʻu.
ʻAʻole kāu mau kī, ʻaʻole kou pilikia
Ke kūkulu nei mākou i kahi ʻōnaehana hoʻololi waiwai a makemake mākou e hoʻopau i ka mālama waena o kēia mau waiwai, akā pono mākou e hōʻoia i ka palekana o ke kālepa.
Hiki iā ʻoe ke hana ma ke ʻano he luna kānāwai i kahi kūlana hoʻopaʻapaʻa a hana i nā kālepa me nā ʻeke kālā e koi ana i ʻelua o ʻekolu mau pūlima: mea kūʻai aku, mea kūʻai aku a me ka escrow.
Eia naʻe, inā lanakila ka mea komo i ka escrow, a laila loaʻa iā ia nā pūlima ʻelua i koi ʻia.
ʻO ka Atomic swap kahi hoʻolālā hoʻololi kahi o ka mea hōʻoiaʻiʻo he ʻaelike akamai e ʻae wale i ka hana pono.
Me he mea lā i ka nane e pili ana i ka ʻīlio hae, ke kao a me ke kāpeti, hiki iā ʻoe ke hana e like me ke ʻano kūpono wale nō a loaʻa nā poho inā haʻalele ʻoe.
Ma kahi o nā holoholona momona wale nō, hāʻawi ʻia ke kauoha e kahi hana hash kahi paʻakikī loa ka loaʻa ʻana o kahi hui ʻana ʻaʻole pono e hoʻomaka.
Kaʻanuʻu mua: nane
Inā makemake ʻo Alice i kekahi kakahiaka maikaʻi e hāʻawi iā Bob i kahi bitcoin no kahi lima o "crypto-yuan".
- Ke hana nei ʻo ia i kekahi mea huna nui
- Loaʻa i kahi hash mai ia mea
- Hoʻololi i nā bitcoins i kahi ʻaelike akamai, kahi e hiki ai iā Bob ke hoʻihoʻi i ke kālā ma ka hōʻike ʻana i kahi mea huna (pono ka hash o ia mea e like me ka mea i ʻōlelo ʻia ma ka ʻaelike)
- Inā ʻaʻole hōʻike ʻo Bob i kāna bitcoins i ke ahiahi, hiki iā Alice ke hoʻihoʻi iā ia iho.
Kaʻanuʻu ʻelua: maunu
Hoʻokomo ʻo Bob i ka pāʻani a hoʻoili i ka "crypto-euro" i kāna ʻaelike, i kākau ʻia ma ke ʻano:
- Hiki iā Alice ke lawe i nā "crypto-yens" ma ka hōʻike ʻana i kahi helu huna
- ʻAʻole ma mua o ka ʻaina awakea, hiki iā Bob ke hoʻihoʻi i ka waihona ke hōʻike ʻole ʻo Alice.
KaʻAnuʻu ʻekolu: aia ka pane i ka maunu
Hele mai ʻo Alice no kāna kālā a lawe i ke kālā mai ka ʻaelike a Bob, e hōʻike ana i kāna mea huna i ka hana.
Kaʻina hope: ua hoʻoholo ʻia ka nane
ʻIke ʻo Bob i ke kālepa, a me kāna maka ʻaeto ua unuhi ʻo ia i ka mea huna a Alice i hōʻike ai i ka ʻaelike. Hoʻohana ʻo ia i kēia mea huna e hoʻihoʻi i kāna bitcoins.
Ke hele hewa
Inā lilo koke ʻo Alice i mea make, lawe ʻo Bob i kāna yuan i ka ʻaina awakea.
Ma ka huli ʻana, hoʻihoʻi ʻo Alice i ka bitcoin i ke ahiahi inā hoʻoholo ʻo Bob hoʻopunipuni e paʻa i ke kālā a hiki i nā manawa maikaʻi.
Inā makemake ʻoe i ke kiʻi ma mua o ka kikokikona, loaʻa iā Habré kahi kikoʻī a me ka ʻike maka nou. .
Hoʻolālā ʻia ka ʻokoʻa ma waena o nā manawa manawa e hōʻoiaʻiʻo iā mākou e kūʻē iā Alice ʻino, nāna e lawe i ke kālā a Bob i ka manawa hope loa, a pau ka manawa i ka wā e komo ai ʻo ia i ka hex i ke kālepa me nā manamana lima haʻalulu.
ʻAʻole hiki i nā mea komo ke nalowale i kā lākou kālā; ʻo ka hapa nui, pono lākou e kali no ka hoʻihoʻi.
Kākoʻo blockchainHe hoʻolālā maʻalahi kēia ʻaʻohe mea e koi ai mai ka launa pū ʻana i nā blockchains:
- Kākoʻo no nā ʻaelike akamai me hoʻokahi lālā
- Pono nā poloka ʻelua e kākoʻo i nā algorithm hashing like (e hoʻomanaʻo e nānā i ka lōʻihi huna)
- Laka manawa.
I ka nānā mua ʻana, ua hiki ke ʻōlelo aku i ke kumukūʻai "aloha, ua hewa kā mākou hālāwai," akā ʻaʻole ia ka hihia.
No ko lākou mau pono āpau, ʻaʻole i hoʻohauʻoli ʻia nā hopena swap atomic i kā lākou wai. ʻO ka hapa nui no ka mea ma ka hui BTC-USD kaulana loa, ʻaʻole i hōʻike piha ʻia ka ʻāpana fiat.
ʻO ka holomua o USDT ua hāʻawi i kahi nalu holoʻokoʻa o nā kālā paʻa i ka format ERC20 no kēlā me kēia ʻono, mai ka USDC mālama nui a hiki i ka DAI algorithmic.
No laila, no ka maʻalahi, hoʻopaʻapaʻa hou mākou ua kūʻai aku ʻo Alice i nā Bitcoins iā Bob no kekahi mau hōʻailona ERC20, a ke manaʻolana nei mākou no ka laki o nā stabilizers, no ka mea he nui nā pilikia ʻenehana.
ʻO ka wikiwiki
ʻAʻole wikiwiki loa ʻo Bitcoin a me Ethereum, akā eia mākou e kali mua no kahi waihona me nā hōʻoia āpau, a laila no ka lua.
ʻO kēia wale nō no ka mea ʻo ka mea i ʻike i ka mea huna e waiho mua i ke kālā, a kali ka hoa paio i ka hope a laila hoʻoili i kāna ʻāpana.
Eia kekahi, ke hana nei mākou i kahi waiwai nui loa, no laila i kēia manawa hiki ke loli nui ka uku, a ʻaʻole maʻalahi ka hoʻololi ʻana i nā kūlana.
Palekana
Ke waiho nei kēlā me kēia hoʻololi i nā mea waiwai ma nā blockchain ʻelua. Hiki i ka mea nānā pono ke ʻike i nā hashes like i loko o nā ʻaelike akamai a hana i kahi hopena kūpono ua hoʻopau ʻia kahi hana, kahi e hiki ai ke kiʻi ʻia nā hopena he nui mai ka uku hoʻololi i ka ʻauhau.
I ka ʻike ʻana o ka waihona kālā e pili ana i kāu mau hana, he mea ʻoluʻolu loa ia; i ka ʻike ʻana o nā mea a pau e pili ana iā ia, ʻoi aku ka maikaʻi ʻole.
'O ka pono
ʻO ka wahi ikaika o ka blockchain ma ka laulā a me ka ether. E ʻike kākou i nā hana a ka mea kūʻai aku a me ka mea kūʻai aku e hana ai.
Mai ka manaʻo o ka mea kūʻai aku, maʻalahi nā mea a pau: pono ʻoe e hoʻololi i Bitcoin i kahi helu p2sh. Me ka ether, ʻoi aku ka paʻakikī o nā mea āpau.
ka ʻaelikeE nānā i ka ʻaelike i kau ʻia ma luna o Github no kahi swap:
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);
}
}
E hoʻomaikaʻi mai! Mai hoʻohana i kēia a me nā ʻaelike ʻē aʻe mai ka ʻatikala i ka hana ʻana, ua kākau ʻia no nā kumu hōʻikeʻike wale nō. ʻOi aku kēia.
- Pono ʻo Bob e kāhea i ke ʻano o ka ʻaelike hōʻailona
approve, e hāʻawi ana i ka ʻaelike swap e komo i kāna mau hōʻailona - Hana ʻo Bob i ka swap a me ka ʻaelike me ke ʻano
transferFromlawe i nā hōʻailona o ka mea hoʻouna i kāu helu wahi - ʻO Alice i loko
withdrawhōʻike i ka mea huna a me ka ʻaelike keleponatransfer
ʻAʻole kākoʻo ka hapa nui o nā wallets a me nā hoʻololi crypto approve nā hōʻailona, a no ke kumu maikaʻi.
Hoʻohana pinepine nā mea hoʻohana i nā hewa a hoʻololi wale i nā hōʻailona i ka ʻaelike, a laila nalowale nā tokens. Ua piha nā ʻōlelo ma Etherscan i nā kanikau mai ka poʻe pōʻino.
A no ke kāhea ʻana i kahi ʻaelike, pono ʻoe e uku i ke kōmike ma ETH, ʻo ia ka mea e hoʻopaʻa ʻia nā mea ʻelua ma mua o ka hoʻomaka ʻana i ke kālepa, a he kakaikahi ka poʻe makemake e hana i kēia.
Paʻa kinoea
ʻO kahi maikaʻi e hoʻomaka ai, ʻo ia ka wehe ʻana i ka māka hoʻouna i nā wahi a pau e hiki ai a manaʻo e loaʻa iā mākou kekahi e ʻeha nei i nā ʻaelike kelepona kelepona nui no nā mea hele mai.
ʻaelike i hoʻonui ʻia
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);
}
}
ʻO ka dualism kī nui a me ka EIP 712
E like me kā mākou e ʻike ai, hiki i kahi ʻōlelo ma ka lewa ke lilo i ʻaelike, a i ʻole he kumuhana, ʻo ia hoʻi, he kī.
ʻO ka hana nui a ke kī ʻo ke kau inoa ʻana i kekahi mau memo.
Hiki iā mākou ke hoʻohana i ka Bob-contract ma ke ʻano he mea hoʻouna, ka mea e hana ai i nā ala kūpono a pau, i ka nānā mua ʻana i ka pūlima o Bob-key.
I kēia manawa, hiki i kekahi ke kākoʻo i ke komisina o ka mea komo, akā ʻo ka mea ʻike i ke kī e hoʻoholo.
Bob-ʻaelike
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);
}
}
Loaʻa i ka Ethereum kahi maʻamau no ka hana ʻana me nā pūlima o nā hale ʻikepili paʻakikī , hiki iā ʻoe ke heluhelu hou aku e pili ana iā ia ma
Hoʻokaʻawale a lanakila
ʻO ka manawa pinepine ke ʻano o ka hacking i kahi ʻaelike Ethereum e like me kēia:
- Hoʻokomo kālā ka mea komo i loko o ka ʻaelike
- A laila lawe ʻo ia i ke kālā
- Ke hele hewa nei kekahi mea
- Lawe hou ka mea hoʻouka i ke kālā
Inā mākou e hoʻi i kā mākou hiʻohiʻona mua, hewa kekahi mea inā ʻo ka nane he ʻāpana ʻole o nā bytes.
Pehea e ʻaihue ai i ka milionaE hana i kahi hoʻololi me ka hash 0x66687aadf862bd776c8fc18b8e9f8e20089714856ee233b3902a591d0d5f2925
ʻO sha256 kēia mai 0x0000000000000000000000000000000000000000000000000000000000000000
Hoʻololi mākou i ka mea huna a lawe i kā mākou mau hōʻailona
Hoʻouna hou mākou a lawe i kekahi, no ka mea 0 = 0
Ma ka hana ʻana i kahi ʻaelike kaʻawale no kēlā me kēia kālepa, hiki iā mākou ke hoʻokaʻawale i nā ʻaelike ma ka pae EVM.
Akā ʻaʻole ʻo ia wale nō: i kēia manawa ua loaʻa i kēlā me kēia kālepa kona wahi ponoʻī, kahi e hiki ai iā ʻoe ke hoʻololi i nā hōʻailona mai kekahi ʻeke kālā a hoʻololi paha.
Haʻalele ʻia nā ʻaelike a hana2
Akā i kēia manawa no kēlā me kēia kālepa pono mākou e hana i kahi ʻaelike a kali i ka mea kūʻai aku e hoʻololi i ka hana "crypto-finding" ma laila. Ma ka papahana "ʻaelike i ke kakahiaka, kālā i ke ahiahi", aia mau ka pilikia e hāʻule ka mea kūʻai aku, a ua hoʻohana muaʻia ka ether i ka hanaʻana i kaʻaelike.
Hiki iā ʻoe ke hana i ke kālā i ke kakahiaka a me nā bytes i ke ahiahi?
ʻO nā mea hoʻomohala ma ke kahua paʻa o Constantinople hoʻohui i ke aʻo create2, ka mea e hana i kahi ʻaelike hou ma kahi helu deterministic
keccak256( 0xff ++ address ++ salt ++ keccak256(init_code))[12:]
'Ahea
- address — hale kūʻai ʻaelike hale hana
- paʻakai - kekahi helu, ke ʻano o ka mea a mākou e aʻo ai i ka moʻolelo aʻe
- init_code - ʻaelike bytecode a me nā ʻāpana hana.
ʻOihanaKe hana wale nei ke aʻo ʻana ma o ka hui ʻana, no laila ke nānā aku nei ka hale hana i mea weliweli iki:
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);
}
}
Hiki ke loaʻa kāu code aelike me ka hoʻohana ʻana i ka 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);
Ma muli o ke kākoʻo liʻiliʻi i ka paʻa, hiki ke helu pololei ʻia ke kinoea no ka ʻaelike ma muli o kekahi mau subtleties o ka ether.
ʻOi aku ka maikaʻi inā loaʻa ka hapa kinoea, hāʻule ka ʻaelike me kahi hewa kūloko, me ka ʻole o ka hōʻike ʻana ʻaʻole lawa ke kinoea, e like me kāu e manaʻo ai.
I kēia manawa hiki iā mākou ke hoʻololi i nā hōʻailona i nā ʻaelike me ka ʻole o ka hoʻokumu ʻana iā lākou ma mua, a hiki i ka hoʻolaha ʻana iā lākou ma ka pūnaewele, ʻaʻohe mea e manaʻo i ka hana a ka ʻaelike.
ʻAʻole e ʻoki ka manu koraka i ka maka
He mea maopopo, ʻaʻole e hoʻōki ʻia ka mea loiloi maoli, ʻoi aku ka mea i loaʻa i nā hoʻopukapuka maikaʻi i ka hakakā ʻana i nā ʻenemi o ke aupuni me ka hoʻopiʻi kālā, ʻaʻole ia e pani ʻia e ia mau hana hoʻopunipuni kamaliʻi, a ma hope o ka hoʻokumu ʻana i ka ʻaelike e ʻike mau ʻo ia i ka hash.
Pehea e pale ai i ka hōʻike ʻana o ka hash?
Hoʻololi mākou i ka swap iā ia iho i ka offchain: hoʻololi nā mea komo i nā pūlima no ka hoʻololi ʻana i kahi ʻaelike swap, a laila hōʻike pilikino ʻia ka mea huna.
ʻO kēlā me kēia ʻanuʻuHoʻokumu ʻia ʻelua "multisig" kahi e hiki ai ke hoʻihoʻi ʻia ke kālā inā loaʻa iā Alice a me Bob nā pūlima.
No ka pale ʻana i kekahi o ka poʻe komo mai ka hele ʻana i waho e lilo i mea pōʻino, e hoʻohui mākou i kahi manawa hoʻomaha maikaʻi.
Hana like ʻo Alice lāua ʻo Bob i nā waihona
- Manaʻo ʻo Alice i kahi mea huna a hāʻawi iā Bob i ka hash o ka mea huna a me kahi pūlima kālepa e hoʻololi i nā bitcoins i ka helu swap.
- Hāʻawi ʻo Bob iā Alice i kahi pūlima e hoʻihoʻi i nā hōʻailona i kahi ʻaelike swap me kahi hash huna.
- Ua haʻi ʻo Alice iā Bob i kahi mea huna.
I kēia manawa, hiki mai ka lokahi: hiki iā Alice lāua ʻo Bob ke hoʻopau i ka ʻaelike i kēlā me kēia manawa. I loko o ia ʻano launa aloha, hiki iā lākou ke hoʻololi i nā pūlima e hoʻihoʻi kālā i nā helu hope.
No ka mea nānā i waho, me he mea lā ua hele ke kālā ma kahi ʻaelike 2-of-2 multisig.
ʻAe kēia papahana i nā ʻaoʻao ʻelua e hana i kahi waihona i ka manawa like, no ka mea, ua hōʻike ʻia ka mea huna ma hope o ka hōʻoia ʻana.
Level 2
No ka mea hiki iā mākou ke hoʻihoʻi i ke kālā i kahi helu a ʻaʻole hoʻolaha i kahi kālepa waena, ʻaʻohe mea e pale iā mākou mai ka hoʻihoʻi ʻana i ke kālā i nā helu helu a hana i kahi helu palena ʻole o nā hana waena. ʻAʻole ia he hoʻonohonoho pono no kahi hoʻololi, akā ke hoʻomaka ʻoe e hōʻiliʻili i kahi swap, paʻakikī ke hoʻōki.
I kēia manawa hiki iā Alice lāua ʻo Bob ke huli aʻe me ko lāua ikaika a pau. No ka laʻana, e helu ʻakomi i ke kumu kūʻai maʻamau ma ka hoʻololi ʻana i ka satoshi i kēlā me kēia kekona, a i ʻole e hoʻopili pololei i ka mea hana mākeke a me ka loaʻa kālā.
ʻO kēlā me kēia ʻanuʻu
- Hana ka mea kūʻai aku i kahi huna a hāʻawi i ka mea kūʻai aku i kahi hash o ka mea huna a me kahi pūlima kālepa kahi i hoʻoili ʻia ai kahi hapa o ke kālā i ka helu p2sh swap, a hoʻihoʻi ʻia ke koena i ka helu o ka mea kūʻai aku.
- Hoʻouna ka mea kūʻai aku i kahi pūlima e ʻae ana i nā hōʻailona swap a me nā loli e hoʻouna ʻia i ka helu o ka mea loaʻa.
- Hōʻike ka mea kūʻai aku i ka mea huna
- Hoʻomaka hou ka mōʻaukala me kahi mea huna hou, a me ka hoʻololi ʻana a me ka hoʻololi ʻana, ua hoʻohui ʻia ka wehe ʻana o ka mea i kūʻai mua ʻia i ka helu o ka mea kūʻai aku a ua uku ʻia i ka helu o ka mea kūʻai aku.
I kēia manawa, hiki iā mākou ke komo i ke kālepa p2p kiʻekiʻe, ʻo ka mea nui e mālama i ka manawa a pani i ka ʻaelike ma mua o ka manawa.
Eia nō naʻe, ma ka hoʻololi iki ʻana i kā mākou mau ʻaelike, hiki iā mākou ke hāʻawi i kā mākou mau kahawai i ka make ʻole, kahi e maʻalahi ai mākou e kūkulu i kahi pūnaewele.
Akā e kamaʻilio mākou e pili ana i kēia ma ka ʻatikala aʻe.
Source: www.habr.com
