Cite

The process of sending a transaction is the same for deploying a contract and for sending Ethers. The only difference is that the machine-readable code of the deployed contract is placed inside the data field of the deployment transaction.

Ví dụ, xét smart contract sau:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
 
contract AddressToBalance {
    mapping(address => uint256) addressToBalance;
 
    function add(address _addr, uint256 _amount) public {
        addressToBalance[_addr] += _amount;
    }
 
    function retrieve(address _addr) public view returns (uint256) {
        return addressToBalance[_addr];
    }
}

Bytecode khi biên dịch:

{
  "functionDebugData": {},
  "generatedSources": [],
  "linkReferences": {},
  "object": "6080604052348015600e575f5ffd5b506102d78061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c80630a79309b14610038578063f5d82b6b14610068575b5f5ffd5b610052600480360381019061004d919061017d565b610084565b60405161005f91906101c0565b60405180910390f35b610082600480360381019061007d9190610203565b6100c9565b005b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610114919061026e565b925050819055505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61014c82610123565b9050919050565b61015c81610142565b8114610166575f5ffd5b50565b5f8135905061017781610153565b92915050565b5f602082840312156101925761019161011f565b5b5f61019f84828501610169565b91505092915050565b5f819050919050565b6101ba816101a8565b82525050565b5f6020820190506101d35f8301846101b1565b92915050565b6101e2816101a8565b81146101ec575f5ffd5b50565b5f813590506101fd816101d9565b92915050565b5f5f604083850312156102195761021861011f565b5b5f61022685828601610169565b9250506020610237858286016101ef565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610278826101a8565b9150610283836101a8565b925082820190508082111561029b5761029a610241565b5b9291505056fea26469706673582212200a2316c242b53a288b82f06f02115a967751976f59343fab4e340c5d55fa7a8c64736f6c634300081e0033",
  "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xE JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH2 0x2D7 DUP1 PUSH2 0x1C PUSH0 CODECOPY PUSH0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0xF JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA79309B EQ PUSH2 0x38 JUMPI DUP1 PUSH4 0xF5D82B6B EQ PUSH2 0x68 JUMPI JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH2 0x52 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4D SWAP2 SWAP1 PUSH2 0x17D JUMP JUMPDEST PUSH2 0x84 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F SWAP2 SWAP1 PUSH2 0x1C0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x82 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x7D SWAP2 SWAP1 PUSH2 0x203 JUMP JUMPDEST PUSH2 0xC9 JUMP JUMPDEST STOP JUMPDEST PUSH0 PUSH0 PUSH0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 PUSH0 PUSH0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH0 KECCAK256 PUSH0 DUP3 DUP3 SLOAD PUSH2 0x114 SWAP2 SWAP1 PUSH2 0x26E JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH0 PUSH0 REVERT JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH0 PUSH2 0x14C DUP3 PUSH2 0x123 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x15C DUP2 PUSH2 0x142 JUMP JUMPDEST DUP2 EQ PUSH2 0x166 JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x177 DUP2 PUSH2 0x153 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x192 JUMPI PUSH2 0x191 PUSH2 0x11F JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x19F DUP5 DUP3 DUP6 ADD PUSH2 0x169 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1BA DUP2 PUSH2 0x1A8 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1D3 PUSH0 DUP4 ADD DUP5 PUSH2 0x1B1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1E2 DUP2 PUSH2 0x1A8 JUMP JUMPDEST DUP2 EQ PUSH2 0x1EC JUMPI PUSH0 PUSH0 REVERT JUMPDEST POP JUMP JUMPDEST PUSH0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1FD DUP2 PUSH2 0x1D9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH0 PUSH0 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x219 JUMPI PUSH2 0x218 PUSH2 0x11F JUMP JUMPDEST JUMPDEST PUSH0 PUSH2 0x226 DUP6 DUP3 DUP7 ADD PUSH2 0x169 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x237 DUP6 DUP3 DUP7 ADD PUSH2 0x1EF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 PUSH2 0x278 DUP3 PUSH2 0x1A8 JUMP JUMPDEST SWAP2 POP PUSH2 0x283 DUP4 PUSH2 0x1A8 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 ADD SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x29B JUMPI PUSH2 0x29A PUSH2 0x241 JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXP 0x23 AND 0xC2 TIMESTAMP 0xB5 GASPRICE 0x28 DUP12 DUP3 CREATE PUSH16 0x2115A967751976F59343FAB4E340C5D SSTORE STATICCALL PUSH27 0x8C64736F6C634300081E0033000000000000000000000000000000 ",
  "sourceMap": "57:304:0:-:0;;;;;;;;;;;;;;;;;;;"
}

Với PUSH1 tương ứng với 0x60, MSTORE tương ứng với 0x52, CALLVALUE tương ứng với 0x34, … (tham khảoEVM Codes - An Ethereum Virtual Machine Opcodes Interactive Reference) thì chuỗi 608060405234 tương sẽ tương ứng với:

PUSH1 0x80
PUSH1 0x40
MSTORE CALLVALUE

Toàn bộ giá trị trong field object của JSON trên sẽ được dùng làm transaction data của transaction dùng để deploy smart contract.

Resources