Solidity(一)

Account 

1.一种有contract code

一般这种由EOA创建出来

contract account

address

address state

nonce  balance

storage hash  code hash

2.一种没有

external owed account (EOA)

address

address state

nonce balance

transaction有三种

a: 转 Enter

b: 部署contract (create contact)

c: 呼叫contact 里特定的function (call contract)

EOA

几个重要位置:

call

from:送出者

to:接收者

value:给多少

data:转账的备注 

(永久的留在链上)

create contact

from:发送者

to:留空没有接收者,trancation 部署新的合约 

data:把你的bytecode 放进来

value:送到contact 中可以给

call function

合约执行

统一的opcode,opcode/storage价格固定

没有随机性opcode 不会出现0.1 + 0.9 = 9.999

EVM

Account      EVM

codehash    bytecode

machine state

program counter        stack           memory          <--->   account

available gas     256bit 1024solt    256bit **solt        <--->    storage

存储空间

stack  执行后消失

memory 执行后消失

storage 不会消失

ABI  application binary inteface

/ [

//  {

//      "inputs": [],

//      "name": "retrieve",

//      "outputs": [

//          {

//              "internalType": "uint256",

//              "name": "",

//              "type": "uint256"

//          }

//      ],

//      "stateMutability": "view",

//      "type": "function"

//  },

//  {

//      "inputs": [

//          {

//              "internalType": "uint256",

//              "name": "num",

//              "type": "uint256"

//          }

//      ],

//      "name": "store",

//      "outputs": [],

//      "stateMutability": "nonpayable",

//      "type": "function"

//  }

// ]

bytecode 

// {

//  "functionDebugData": {},

//  "generatedSources": [],

//  "linkReferences": {},

//  "object": "608060405234801561001057600080fd5b50610150806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80632e64cec11461003b5780636057361d14610059575b600080fd5b610043610075565b60405161005091906100d9565b60405180910390f35b610073600480360381019061006e919061009d565b61007e565b005b60008054905090565b8060008190555050565b60008135905061009781610103565b92915050565b6000602082840312156100b3576100b26100fe565b5b60006100c184828501610088565b91505092915050565b6100d3816100f4565b82525050565b60006020820190506100ee60008301846100ca565b92915050565b6000819050919050565b600080fd5b61010c816100f4565b811461011757600080fd5b5056fea2646970667358221220404e37f487a89a932dca5e77faaf6ca2de3b991f93d230604b1b8daaef64766264736f6c63430008070033",

//  "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x150 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2E64CEC1 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x6057361D EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x75 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0xD9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0x9D JUMP JUMPDEST PUSH2 0x7E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x97 DUP2 PUSH2 0x103 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB3 JUMPI PUSH2 0xB2 PUSH2 0xFE JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xC1 DUP5 DUP3 DUP6 ADD PUSH2 0x88 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xD3 DUP2 PUSH2 0xF4 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xEE PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xCA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10C DUP2 PUSH2 0xF4 JUMP JUMPDEST DUP2 EQ PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BLOCKHASH 0x4E CALLDATACOPY DELEGATECALL DUP8 0xA8 SWAP11 SWAP4 0x2D 0xCA 0x5E PUSH24 0xFAAF6CA2DE3B991F93D230604B1B8DAAEF64766264736F6C PUSH4 0x43000807 STOP CALLER ",

//  "sourceMap": "141:356:0:-:0;;;;;;;;;;;;;;;;;;;"

// }

demo

// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; /** * @title Calc * @dev Store & retrieve value in a variable */ contract Calc { int private result; function add(int a, int b) public returns(int c) { result = a + b; c = result; } function min(int a, int b) public returns(int c) { result = a - b; c = result; } function mul(int a, int b) public returns(int c) { result = a * b; c = result; } function div(int a, int b) public returns(int c) { result = a / b; c = result; } function getResult() public view returns(int) { return result; } }

你可能感兴趣的:(Solidity(一))