Alohi a me ka pōʻino atomic swap

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. ka wehewehe ʻana i ka hana ʻana o nā swap atom.

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 transferFrom lawe i nā hōʻailona o ka mea hoʻouna i kāu helu wahi
  • ʻO Alice i loko withdraw hōʻike i ka mea huna a me ka ʻaelike kelepona transfer

ʻ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ī EIP 712, hiki iā ʻoe ke heluhelu hou aku e pili ana iā ia ma Metamask wallet blog

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 EIP 1014 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

E kūʻai i ka hoʻokipa hilinaʻi no nā pūnaewele me ka pale DDoS, nā kikowaena VPS VDS 🔥 E kūʻai i ka hoʻokipa pūnaewele hilinaʻi me ka pale DDoS, nā kikowaena VPS VDS | ProHoster