分类: 区块链

区块链相关开发

33 篇文章

以太坊状态树state的修剪流程
state 在以太坊中,交易驱动state的更新,而state的更新影响它底层的trie。如下,是一个交易对state的一个更改的示意图。 由图可见,将账号x中的金额从100改为110之后,影响了其中的4个节点。即如果改变一个账户的数据,沿着数据往上的父节点的数据都将发生改变。如果每次产生一个区块都将整颗状态树的数据保存到硬盘中,那么硬盘将保存了许…
以太坊智能合约相关
存储 以太坊的账户包括外部账户与合约账户,他们同用如下数据结构: type Account struct { Nonce uint64 Balance *big.Int Root common.Hash // merkle root of the storage trie CodeHash []byte } 所有的账户数据是以一颗大的MPT进行存储…
二叉默克尔树
背景描述 在以太坊中,以太坊的账户数据存储在一颗十六叉树中,所谓的十六叉树,是以太坊将传进去的byte数组中的每个元素拆成一个nibble数组(一个byte为2个nibble),比如我要将一个kv对(0xaa, v)存储到十六叉书中,示意图大概如下: 在以太坊中,每个区块都包含一个stateRoot字段,它是MPT根的哈希值。这个根哈希值,是通过对…
以太坊学习备忘录-dev开发模式
dev模式简要说明 主要用来给开发人员提供一个方便的开发测试环境。在dev模式下,可以轻松的获得以太币,方便发起交易,交易也会被快速的打包,节省时间方便验证。在启动命令里面加一个 --dev 即可启动该开发模式。 启动命令 下面提供一条使用dev模式启动的常用命令 geth --datadir ./data --networkid 1337 --n…
以太坊学习备忘录-Trie
主要涉及代码 trie core core/rawdb core/state ethdb/leveldb 需要掌握的知识点 StateDB Trie Account stateObject 账户数据如何存储在Trie中 账户数据的存储是使用SecureTrie中的,主要是使用keecak512(key)作为真实的key存在levelDB中。 由于k…
以太坊学习备忘录-Clique
共识算法选择 eth/ethconfig/config.go CreateConsensusEngine 209 func CreateConsensusEngine(stack *node.Node, chainConfig *params.ChainConfig, config *ethash.Config, notify []string, …
以太坊学习备忘录-挖矿
计算下一个区块的GasLimit core/block_validator.go CalcGasLimit1559 上一个区块gasLimit - (上一个区块gasLimit / 1024 - 1) 但是不能低于设置的最低区块gasLimit ETH的EIP-1559协议 挖矿关于区块燃料参数 eth/ethconfig/config.go 81…
以太坊学习备忘录01
Goland编译调试go-ethereum项目 在运行配置里面运行种类选软件包。然后包路劲使用github.com/ethereum/go-ethereum/cmd/geth,输出目录与工作目录使用C:\Users\lcq\go\src\github.com\ethereum\go-ethereum\build\bin。 call 调用提示insu…
Solidity 安全:已知攻击方法和常见防御模式综合列表
概述 原文链接:https://blog.sigmaprime.io/solidity-security.html 译者:爱上平顶山@慢雾安全团队 校对:keywolf@慢雾安全团队 虽然处于起步阶段,但是 Solidity 已被广泛采用,并被用于编译我们今天看到的许多以太坊智能合约中的字节码。相应地,开发者和用户也获得许多严酷的教训,例如发现语言…
智能合约样例-投票
合约内容预览 例子实现了一个投票智能合约即电子投票系统。解决的主要问题是如何分配合理的权限给正确的人,并且要防止被篡改。这个例子实现了如何去委托投票,整个投票计数过程是自动而且完全透明。 功能上它首先为投票创建一个合约,发起者作为所谓的 chairperson 姑且叫主席来给每一个独立的地址分配相应权限。每一个参与投票者可以自己投票或者委托自己信任…