Git Product home page Git Product logo

ethereum-compass's Introduction

全书链接:http://ethbook.abyteahead.com/

这是给 程序员 读的入门书,更是一本面向 从未接触过以太坊人群 的书。

以太坊是什么?怎么了解相关知识?

这本书涵盖了你想要了解的以太坊的基本知识。

前半本文艺,后半本实践,附录深刻。

内容包括钱包、交易、数据结构。也包括了Solidity语法、虚拟机原理和实战合约编写。

市面上目前的大部分公链/联盟链都借鉴了以太坊的虚拟机。读完本书,你再去看其他项目,会感到成竹在胸。

书中的知识点都是作者在区块链工作中实践总结的。希望对你们有帮助。

鸣谢唯链核心开发组的队友们的指导。

参与本书

如有改进意见,请直接在Issue页面提出。我们会及时修改。

你的名字会出现在“鸣谢”里。^_^

homepage

目录

ethereum-compass's People

Contributors

asbertma avatar binacs avatar laalaguer avatar rep00c avatar yakisakanarf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ethereum-compass's Issues

无止境的卡在了looking for peers上

一路都按照说明进行配置,但是开始命令行之后就始终卡在looking for peer上面。

根据说明,该私链上应该只有我们一个节点,如何能解决这个问题呢?

也试过改为#16中的指令,结果没有改善。

端口已经通过firewall-cmd打开了8545/tcp, 8545/udp, 30303/tcp, 30303/udp, 30304/udp

结果如下
image

创世配置有错误

现在创世配置和以前不一样了
必须加上 eip150Block
不然初始化时会报错
"Fatal: Failed to write genesis block: unsupported fork ordering: eip150Block not enabled, but eip155Block enabled at 0"

修正后的配置是这样
{
"config": {
"chainId": 987,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "0x400",
"gasLimit": "0x8000000",
"alloc": {}
}

编译 Vault.sol 报错

solc 版本 : 0.8.16+commit.07a7930e.Linux.g++
Vault.sol 中的版本也已经改成了 0.8.16
编译命令:solc --optimize --combined-json abi,bin,interface Vault.sol
报错内容:Invalid option to --combined-json: interface
自己的解决办法:删除编译命令中的 interface 选项
得到的结果:

Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing "SPDX-License-Identifier: <SPDX-License>" to each source file. Use "SPDX-License-Identifier: UNLICENSED" for non-open-source code. Please see https://spdx.org for more information.
--> vault.sol


{"contracts":{"vault.sol:Vault":{"abi":[{"inputs":[],"name":"get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bin":"6080604052348015600f57600080fd5b5060ac8061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806360fe47b11460375780636d4ce63c146049575b600080fd5b60476042366004605e565b600055565b005b60005460405190815260200160405180910390f35b600060208284031215606f57600080fd5b503591905056fea2646970667358221220b31a34ecbff3669e6d04f07befff711201739a9b23791901eb9788f4f400ddcd64736f6c63430008100033"}},"version":"0.8.16+commit.07a7930e.Linux.g++"}

我的问题: 为什么会报错说 Invalid option to --combined-json: interface

第五章《启动一条以太坊私链》这一小节中的指令或许需要更新

启动 Geth 节点下,
cd ether-test geth --datadir ./db/ --rpc --rpcaddr=127.0.0.1 --rpcport 8545 --rpccorsdomain "*" \ --rpcapi "eth,net,web3,personal,admin,shh,txpool,debug,miner" \ --nodiscover --maxpeers 30 --networkid 198989 --port 30303 \ --mine --minerthreads 1 \ --etherbase "0x7df9a875a174b3bc565e6424a0050ebc1b2d1d82" \ console
--minerthreads 和 --etherbase 在 Geth/v1.10.8-stable/darwin-amd64/go1.16.6 中应更新为 --miner.threads 和 --miner.etherbase
另外,--rpcapi "eth,net,web3,personal,admin,shh,txpool,debug,miner" 中的 shh 模块已在 geth 中被删除(因此会提示 Unavailable modules in HTTP API list unavailable=[shh])

geth默认禁止HTTP通道解锁账户

新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户
相关issue:ethereum/go-ethereum#17037

第5章中的“转账与收款”
需要以下面的命令来启动节点,才能使用personal.unlockAccount()

geth --datadir ./db/ --http --http.addr=127.0.0.1 --http.port 8545 --http.corsdomain "*"
--http.api "eth,net,web3,personal,admin,shh,txpool,debug,miner"
--nodiscover --maxpeers 30 --networkid 198989 --port 30303
--mine --miner.threads 1
--miner.etherbase "0xb35316db015e203b0fffe4f8fa99201f26bb0edc"
--allow-insecure-unlock

如果没有加参数 --allow-insecure-unlock,则会报错
GoError: Error: account unlock with HTTP access is forbidden at web3.js:6365:9(45)

第四章Radix树中,对于dog值的描述错误

原文
将这个数据集的键(例如 dog)和值(例如 0)按照 Radix 树状结构组织起来
应该改为
将这个数据集的键(例如 dog)和值(例如 1)按照 Radix 树状结构组织起来

我们将该编译结果放入一份 temp.js 文件中并重新排版。

请问下,这个重排是怎么实现的

出处:
var output = {"contracts":{"Vault.sol:Vault":{"abi":"[{\"constant\":false,\"inputs\":[{\"name\":\"data\",\"type\":\"uint256\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]","bin":"608060405234801561001057600080fd5b5060bf8061001f6000396000f30060806040526004361060485763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166360fe47b18114604d5780636d4ce63c146064575b600080fd5b348015605857600080fd5b5060626004356088565b005b348015606f57600080fd5b506076608d565b60408051918252519081900360200190f35b600055565b600054905600a165627a7a723058203269ba0a634bf05e2a15966872aaa719b6d147aaa419d656374ad860104e6ef40029"}},"version":"0.4.24+commit.e67f0147.Darwin.appleclang"}

目标:实现教材中那样对编译结果的重排
实际结果: Command 'var' not found, but there are 18 similar ones.
具体操作: 在系统终端直接输入 var output = {"contracts":{"Vault.sol:Vault":{"abi":"[{\"constant\":false,\"inputs\":[{\"name\":\"data\",\"type\":\"uint256\"}],\"name\":\"set\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]","bin":"608060405234801561001057600080fd5b5060bf8061001f6000396000f30060806040526004361060485763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166360fe47b18114604d5780636d4ce63c146064575b600080fd5b348015605857600080fd5b5060626004356088565b005b348015606f57600080fd5b506076608d565b60408051918252519081900360200190f35b600055565b600054905600a165627a7a723058203269ba0a634bf05e2a15966872aaa719b6d147aaa419d656374ad860104e6ef40029"}},"version":"0.4.24+commit.e67f0147.Darwin.appleclang"}
系统: ubuntu 18.04
solc version : version: 0.8.16+commit.07a7930e.Linux.g++

geth命令的参数错误

第5章中的“启动一条以太坊私链”
其中geth命令的多个参数已经过时,得用新的参数名称

--rpc 改为 --http
--rpcaddr 改为 --http.addr
--rpcport 改为 --http.port
--rpccorsdomain 改为 --http.corsdomain
--rpcapi 改为 --http.api
--minerthreads 改为 --miner.threads
--etherbase 改为 --miner.etherbase

修改过后的命令行是这样
geth --datadir ./db/ --http --http.addr=127.0.0.1 --http.port 8545 --http.corsdomain "*"
--http.api "eth,net,web3,personal,admin,shh,txpool,debug,miner"
--nodiscover --maxpeers 30 --networkid 198989 --port 30303
--mine --miner.threads 1
--miner.etherbase "0x7df9a875a174b3bc565e6424a0050ebc1b2d1d82"
console

另外,现在挖到矿之后,只会显示 mined potential block
而不再有小锤子的图标

第四章数据结构-资料篇:区块-区块体-transactions交易列表 解释有误

该书原文:
transactions 交易列表: 所有入选该区块的交易的哈希值列表,每个哈希是一个 32字节 的数据。根据哈希值,可以用客户端在以太坊节点上唯一查询该笔交易

但是根据github的geth源码:
https://github.com/ethereum/go-ethereum/blob/master/core/types/block.go#L168
type Block struct { header *Header uncles []*Header transactions Transactions ...

以及
https://github.com/ethereum/go-ethereum/blob/6c3513c0775e1e1e69a7c9e5c86255804fa3fb36/core/types/transaction.go#L51
`type Transaction struct {
inner TxData // Consensus contents of a transaction
time time.Time // Time first seen locally (spam avoidance)

// caches
hash atomic.Value
size atomic.Value
from atomic.Value

}

type TxData interface {
txType() byte // returns the type ID
copy() TxData // creates a deep copy and initializes all fields

chainID() *big.Int
accessList() AccessList
data() []byte
gas() uint64
gasPrice() *big.Int
gasTipCap() *big.Int
gasFeeCap() *big.Int
value() *big.Int
nonce() uint64
to() *common.Address

rawSignatureValues() (v, r, s *big.Int)
setSignatureValues(chainID, v, r, s *big.Int)

}`

可以看出,这里的区块体中装载的是交易本身(即包含了to,from,data等信息)

另外根据以太坊黄皮书, “一系列的交易 BT” ,也指的是字节序列的交易。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.