iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
Web 3

以 Python 進入以太坊虛擬機 (EVM) 的幻想境界系列 第 11

虛擬境界 11:儲存空間指令

  • 分享至 

  • xImage
  •  

第十一章:介紹 EVM 儲存空間相關指令

在這一章中,我們將介紹 EVM 中與儲存空間相關的指令,包括 SLOAD 和 SSTORE。

SLOAD = 0x54
SSTORE = 0x55

儲存空間相關指令概述

這些指令用於存取合約的儲存空間,允許合約讀取和寫入永久性儲存中的資料。

  • SLOAD 指令:從永久性儲存中讀取指定位置的資料,並將其推送到堆疊。
def sload(self):
    location = self.evm.stack.pop()
    data = read_from_storage(location)  # 從永久性儲存中讀取資料
    value = int.from_bytes(data, byteorder='big')
    self.evm.stack.append(value)

  • SSTORE 指令:將堆疊頂部的資料寫入指定位置的永久性儲存中。
def sstore(self):
    location = self.evm.stack.pop()
    value = self.evm.stack.pop()
    write_to_storage(location, value)  # 將資料寫入永久性儲存

這些指令允許合約在執行過程中存取永久性儲存,進而讀取或寫入資料。

請注意,這些指令的實現需要訪問合約的永久性儲存,你需要根據具體情況自行實現相應的永久性儲存讀取和寫入邏輯。

這邊就要拉回第一章設計的 EVM Class,我們需要在那邊做空資料初始化,我們在稍後幾章會將 EVM 和這些教過的 class 組合而成完整的狀態機。

class EVM:
    def __init__(self, code) -> None:
        self.code = code
        self.pc = 0
        self.stack = []
        self.memory = bytearray()
        self.storage = {}

在這一章中,我們介紹了 EVM 中與儲存空間相關的指令,包括 SLOAD 和 SSTORE。這些指令允許合約讀取和寫入永久性儲存中的資料。


上一篇
虛擬境界 10:記憶體指令
下一篇
虛擬境界 12:日誌指令
系列文
以 Python 進入以太坊虛擬機 (EVM) 的幻想境界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言