原创 以太坊虛擬機原理及源代碼深入挖掘

一. 概述         EVM爲以太坊虛擬機,以太坊底層通過EVM支持智能合約的執行和調用。調用智能合約時根據合約的地址獲取合約代碼,生成具體的執行環境,然後將代碼載入到EVM虛擬機中運行。通常目前開發智能合約的高級語言爲Soli

原创 以太坊-EVM第4部分——ABI編碼外部方法調用的方式

在本系列的上一篇文章中我們看到了Solidity是如何在EVM存儲器中表示覆雜數據結構的。但是如果無法交互,數據就是沒有意義的。智能合約就是數據和外界的中間體。 在這篇文章中我們將會看到Solidity和EVM可以讓外部程序來調用合約的方

原创 以太坊-虛擬機第5部分——一個新合約被創建後會發生什麼

在該系列文章的前部分,我們學了EVM彙編基礎,也學了ABI編碼是如何允許外部程序與合約進行通信的。在本文中,我們將會學習一個合約是如何從零創建的。 本系列的相關文章(按照順序): EVM彙編代碼的介紹(第1部分) 固定長度數據類型的表示方

原创 以太坊 - 深入淺出虛擬機

以太坊虛擬機 以太坊虛擬機,簡稱EVM,是用來執行以太坊上的交易的。業務流程如下圖: 輸入一筆交易,內部會轉換成一個Message對象,傳入EVM執行。 如果是一筆普通轉賬交易,那麼直接修改StateDB中對應的賬戶餘額即可。如果是智能合

原创 以太坊-EVM彙編代碼的介紹(第1部分)

Solidity提供了很多高級語言的抽象概念,但是這些特性讓人很難明白在運行程序的時候到底發生了什麼。我閱讀了Solidity的文檔,但依舊存在着幾個基本的問題沒有弄明白。 string, bytes32, byte[], bytes之間

原创 以太坊-EVM第3部分——動態數據類型的表示方法

Solidity提供了在其他編程語言常見的數據類型。除了簡單的值類型比如數字和結構體,還有一些其他數據類型,隨着數據的增加可以進行動態擴展的動態類型。動態類型的3大類: 映射(Mappings):mapping(bytes32 => ui

原创 以太坊-EVM第2部分——固定長度數據類型的表示方法

在本系列的第一篇文章中,我們已經看到了一個簡單的Solidity合約的彙編代碼: contract C { uint256 a; function C() { a = 1; } } 該合約歸結於ss

原创 以太坊源碼分析-交易源碼分析(一)

目錄 一 . 發起交易 1. 發送交易時參數的機構體對象 2. SendTransaction()方法介紹 2.1. toTransaction()方法 2.2. 調用wallet.SignTx(account, tx, chainID)