以太坊ETH原始碼分析(2) 交易執行過程

2021-09-01 23:59:56 字數 1853 閱讀 9822

交易的發起一般通過呼叫rpc介面實現,eth原始碼本身提供了相關api,位於原始碼的ethereum/go-ethereum的internal包中

// sendtransaction creates a transaction for the given argument, sign it and submit it to the

// transaction pool.

func (s *publictransactionpoolapi) sendtransaction(ctx context.context, args sendtxargs)

(common.hash, error)

//a.根據傳送者位址找出對應錢包用於簽名

wallet, err := s.b.accountmanager(

).find(account)

if err != nil , err

}if args.nonce == nil

// set some sanity defaults and terminate on failure

if err := args.setdefaults(ctx, s.b)

; err != nil , err

} // assemble the transaction and sign with the wallet

//b.處理原生交易資料

tx := args.totransaction(

) var chainid *big.int

if config := s.b.chainconfig(

); config.iseip155(s.b.currentblock(

).number(

)) //c.對交易進行簽名

signed, err := wallet.signtx(account, tx, chainid)

if err != nil , err

} //d.提交交易

return submittransaction(ctx, s.b, signed)

}

func (args *sendtxargs) totransaction(

) *types.transaction

else

if args.input != nil

// 接收者位址為空時,即為建立合約交易

if args.to == nil

// 此處為普通交易

return types.newtransaction(uint64(*args.nonce), *args.to, (*big.int)

(args.value), uint64(*args.gas), (*big.int)

(args.gasprice), input)

}

// signtx signs the given transaction with the requested account.

func (ks *keystore) signtx(a accounts.account, tx *types.transaction, chainid *big.int)

(*types.transaction, error)

// depending on the presence of the chain id, sign with eip155 or homestead

if chainid != nil

return types.signtx(tx, types.homesteadsigner, unlockedkey.privatekey)

}

…待續

以太坊原始碼分析 交易的執行

以太坊是乙個執行智慧型合約的平台,被稱作可程式設計的區塊鏈,允許使用者將編寫的智慧型合約部署在區塊鏈上執行。而執行合約的主體便是以太坊虛擬機器 evm 區塊 交易 合約 區塊鏈由區塊 block 組成,而區塊中打包一定數量的交易 transaction 交易可能是乙個單純的轉賬操作,也可能是呼叫乙個...

以太坊原始碼 交易(一)

交易是區塊鏈中最基本也是最核心的乙個概念,在以太坊中,交易更是重中之重,因為以太坊是乙個智慧型合約平台,以太坊上的應用都是通過智慧型合約與區塊鏈進行互動,而智慧型合約的執行是由交易觸發的,沒有交易,智慧型合約就是一段死的 可以說在以太坊中,一切都源於交易。下面就來看看在以太坊中交易是什麼樣的,交易裡...

12 以太坊原始碼分析 12 交易資料分析

交易的資料結構定義在core.types.transaction.go中,結構如下 type transaction struct交易的結構體中只有乙個data欄位,是txdata型別的。其他的hash,size,from都是快取。txdata結構體定義如下 type txdata structac...