- 博客(187)
- 资源 (11)
- 收藏
- 关注
原创 死磕solidity之编写可升级合约
为什么要编写可升级合约默认情况下,以太坊中的智能合约是不可变的。但是一旦项目方提前发现合约漏洞或者想升级功能,是需要合约可以变动的,因此一开始编写可升级的合约是重要的。因此我们需要使用可升级的合约来增强可维护性。升级合约概述升级合约通常是采用代理模式来实现,这种模式的工作原理存在两个合约,一个是代理合约,一个是实现合约,代理合约负责管理合约状态数据,而实现合约只是负责执行合约逻辑,不存储任何状态数据。用户通过调用代理合约,代理合约对实现合约进行delegate call从而达到升级的目的。目前主
2022-11-05 18:51:55
1123
1
原创 死磕solidity之如何有效的节省gas.md
为什么要强调优化gas的重要性DAPP中收取的费用取决于功能逻辑的复杂程度,越复杂消耗的计算资源越多。并且需要用户承担一部分gas,所以solidity 的优化显得非常的重要。同时注重优化gas的合约开发人员写出来的合约代码更安全,质量更高。1. 封装结构以uint 为例,如果我们的程序中包含多个类似的变量,可以将其封装在一起,因为不管uint8 ,uint32 ,uint16,solidity都会为其保留256位。即使你使用uint8也不会节省gas.2. 最小化读写链上数据首先明确一点在读写
2022-11-05 14:28:32
1185
原创 go使用sort包对map进行排序
package main import ( "fmt" "sort") func main() { test := map[string]int{"wang":1,"liang":4,"lin":2,"dd":2,"haha":10} haha := rankByWordCount(test) fmt.Println(haha) } func rankByWordCount(wordFrequencies map[string]int) PairList{ pl := m
2022-01-06 16:01:21
737
原创 linux 添加环境变量的4种方法
http://www.360doc.com/content/20/0906/15/17302338_934255518.shtml
2021-04-16 13:11:22
207
原创 死磕以太坊源码分析之blockChain分析
死磕以太坊源码分析之blockChain分析配合以下代码进行阅读:https://github.com/blockchainGuide/写文不易,给个小关注,有什么问题可以指出,便于大家交流学习。blockchain关键元素db:持久化到底层数据储存,即leveldb;genesisBlock:创始区块currentBlock:当前区块,blockchain中并不是储存链所有的block,而是通过currentBlock向前回溯直到genesisBlock,这样就构成了区块链bodyCa.
2021-02-27 10:35:53
328
原创 死磕以太坊源码分析之区块上链入库
死磕以太坊源码分析之区块上链入库配合以下代码进行阅读:https://github.com/blockchainGuide/写文不易,给个小关注,有什么问题可以指出,便于大家交流学习。引言不管是矿工挖矿还是Fetcher同步,Downloader同步,或者是导入本地文件等等,最中都是将区块上链入库。接下来我们就详细分析这部分的动作。几处可能调用的地方①:在Downloader同步最后会将区块插入到区块链中func (d *Downloader) importBlockResults(res.
2021-02-24 08:50:31
266
原创 死磕以太坊源码分析之Ethash共识算法
死磕以太坊源码分析之Ethash共识算法代码分支:https://github.com/ethereum/go-ethereum/tree/v1.9.9文章合集:https://github.com/blockchainGuide引言目前以太坊中有两个共识算法的实现:clique和ethash。而ethash是目前以太坊主网(Homestead版本)的POW共识算法。目录结构ethash模块位于以太坊项目目录下的consensus/ethash目录下。algorithm.go实现了Da.
2021-02-21 08:46:01
462
1
原创 死磕以太坊源码分析之区块上链入库
死磕以太坊源码分析之区块上链入库配合以下代码进行阅读:https://github.com/blockchainGuide/写文不易,给个小关注,有什么问题可以指出,便于大家交流学习。引言不管是矿工挖矿还是Fetcher同步,Downloader同步,或者是导入本地文件等等,最中都是将区块上链入库。接下来我们就详细分析这部分的动作。几处可能调用的地方①:在Downloader同步最后会将区块插入到区块链中func (d *Downloader) importBlockResults(res.
2020-12-24 10:47:50
318
原创 死磕以太坊源码分析之Fetcher同步
死磕以太坊源码分析之Fetcher同步Fetcher 功能概述区块数据同步分为被动同步和主动同步:被动同步是指本地节点收到其他节点的一些广播的消息,然后请求区块信息。主动同步是指节点主动向其他节点请求区块数据,比如geth刚启动时的syning,以及运行时定时和相邻节点同步Fetcher负责被动同步,主要做以下事情:收到完整的block广播消息(NewBlockMsg)收到blockhash广播消息(NewBlockHashesMsg)这两个消息又是分别由 peer.As.
2020-12-03 08:51:05
227
原创 死磕以太坊源码分析之rlpx协议
死磕以太坊源码分析之rlpx协议本文主要参考自eth官方文档:rlpx协议符号X || Y:表示X和Y的串联X ^ Y: X和Y按位异或X[:N]:X的前N个字节[X, Y, Z, ...]:[X, Y, Z, …]的RLP递归编码keccak256(MESSAGE):以太坊使用的keccak256哈希算法ecies.encrypt(PUBKEY, MESSAGE, AUTHDATA):RLPx使用的非对称身份验证加密函数 AUTHDATA是身份认证的数据,并非密文的一部分 .
2020-11-24 16:50:32
387
原创 死磕以太坊源码分析之p2p节点发现
死磕以太坊源码分析之p2p节点发现在阅读节点发现源码之前必须要理解kadmilia算法,可以参考:KAD算法详解。节点发现概述节点发现,使本地节点得知其他节点的信息,进而加入到p2p网络中。以太坊的节点发现基于类似的kademlia算法,源码中有两个版本,v4和v5。v4适用于全节点,通过discover.ListenUDP使用,v5适用于轻节点通过discv5.ListenUDP使用,本文介绍的是v4版本。节点发现功能主要涉及 Server Table udp 这几个数据结构,它们有独自的事.
2020-11-23 21:21:16
417
原创 以太坊源码分析之P2P网络启动
文章目录p2p源码目录启动p2p网络Start()设置本地节点设置监听设置节点发现创建DialState运行p2p网络srv.run(dialer)发起TCP连接任务执行TCP连接任务管理TCP连接任务总结参考p2p源码目录discover/ 基于UDP的节点发现V4协议 discv5/ 节点发现V5协议 enode/ 节点信息 enr/ 以太坊节点记录(ethereum node records)
2020-11-21 15:10:53
396
原创 以太坊blockchain源码分析
blockchain关键元素db:持久化到底层数据储存,即leveldb;genesisBlock:创始区块currentBlock:当前区块,blockchain中并不是储存链所有的block,而是通过currentBlock向前回溯直到genesisBlock,这样就构成了区块链bodyCache、bodyRLPCache、blockCache、futureBlocks:区块链中的缓存结构,用于加快区块链的读取和构建;hc:headerchain区块头链,由blockchain额外维护的另一
2020-10-16 16:25:08
342
1
原创 以太坊启动过程源码解析
文章以及资料(开源):github地址文章目录启动参数源码分析加载配置和注册服务1.加载配置2.RegisterEthService3.RegisterShhService4.RegisterEthStatsService启动节点1.启动节点1.1 stack.Start()2.解锁账户3.注册钱包事件4.监听钱包事件5.启动挖矿启动守护线程总结启动参数以太坊是如何启动一个网络节点的呢?./geth --datadir "../data0" --nodekeyhex "27aa615f5fa54.
2020-10-13 14:11:10
348
1
翻译 以太坊启动参数详解
文章以及资料(开源):github地址文章目录命令ETHEREUM 选项开发者模式ETHASH选项交易池选项性能调优选项账户选项API 和控制台选项网络选项矿工选项GAS 价格选项:虚拟机的选项:日志和调试选项:WHISPER 实验选项:弃用选项:其他选项:命令account 管理账户attach 启动交互式JavaScript环境(连接到节点)bug 上报bug Issuesconsole 启动交互式JavaScript环境copydb 从文件夹.
2020-10-12 14:32:22
983
翻译 Istanbul算法详解
文章以及资料(开源):github地址文章目录Terminology:ConsensusConsensus statesState transitionsRound change flowProposer selectionValidator list votingFuture message and backlogOptimizationConstantsBlock headerBlock hash, proposer seal, and committed sealsProposer seal c.
2020-10-12 13:16:31
342
原创 详解私钥、密码、keystore和助记词
文章以及资料(开源):github地址文章目录密码私钥keystore助记词以太坊对BIP的支持密码、私钥、keystore与助记词的关系如何解锁账户密码首先明白密码不是私钥,它是在创建账户时候的密码(注意可以修改)。密码在以下情况下会使用到:作为转账的支付密码用keystore导入钱包的时候需要输入的密码,用来解锁keystore的私钥私钥由64位长度的十六进制的字符组成,比如:0xA4356E49C88C8B7AB370AF7D5C0C54F0261AAA006F6BDE09CD4.
2020-10-12 10:21:01
5991
原创 什么是以太坊
文章以及资料(开源):github地址文章目录定义特点第二层功能以太币智能合约以太坊组件p2p网络共识规则交易状态机数据结构经济安全性扩展阅读定义以太坊(英语:Ethereum)是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether,又称“以太币”)提供去中心化的虚拟机(称为“以太虚拟机”Ethereum Virtual Machine)来处理点对点合约。特点相较于较大多数其他加密货币或区块链技术,以太坊的特点包括下列:智能合约(smart contract):存.
2020-10-11 12:04:53
520
2
原创 go相关命令&gomoudle &go get
go基本命令go开启go moudlego moudle教程go path 工作目录详解cannot find module providing package或cannot find main modulego get 下载包失败问题
2020-09-22 16:31:51
92
原创 利用beyond-compare快速解决冲突
安装beyond-compare在git 中配置git config --local merge.tool bc3git config --local mergetool.path ‘/usr/local/bin/bcomp’git config --local mergetool.keepBackup false出现冲突之后运行git mergetool
2020-09-19 12:05:40
388
原创 gitbook安装到操作
node10下载gitbook在mac上的应用Mac环境安装Gitbook,并导出PDF教程macos安装gitbook出错GitBook的使用方式,快速创建网页文档Mac环境下node安装与卸载方法
2020-09-17 10:13:30
79
原创 linux查看某个时间段的日志(sed -n)-史上最详细
https://www.cnblogs.com/yoyoketang/p/11729966.html
2020-08-25 10:18:53
881
原创 go语言 timer.reset分析
官方API定义func (t *Timer) Reset(d Duration) boolReset使t重新开始计时,(本方法返回后再)等待时间段d过去后到期。如果调用时t还在等待中会返回真;如果t已经到期或者被停止了会返回假。注:比如你的定时器设置的是3秒,中间sleep1秒 < 3,这时候如果reset的话返回的就是 true(因为定时器还在等待),如果你sleep4秒 > 3,那么返回的就是false案例解析/*1.*/func test1(){ start := t
2020-07-22 15:03:53
2452
原创 报错:cannot load xxx/xxx: malformed module path “xxx/xxx“: missing dot in first path element
报错:cannot load xxx/xxx: malformed module path “xxx/xxx”: missing dot in first path element
2020-07-21 14:38:15
6622
原创 redis通过lua脚本,获取满足key pattern的所有值
redis通过lua脚本,获取满足key pattern的所有值示例:获取所有tx开头的个数1.SCRIPT LOAD “local keys = redis.call(‘keys’, KEYS[1]); local all = redis.call(‘mget’,unpack(keys)) return #all”得到值 :50b377ace3ec7772e8f2f585ff746e30541b8ffc2.EVALSHA “50b377ace3ec7772e8f2f585ff746e30541
2020-07-02 11:11:36
490
原创 git 解决每次更新代码都要输入用户名密码的解决方案--1
git config --global credential.helper storegit pull /git push (第一次输入,后续就不用再次数据)
2020-06-21 10:34:41
356
原创 Go1.13:使用go mod 管理依赖, 提示cannot find module providing package或cannot find main module
https://blog.csdn.net/fly910905/article/details/104299085
2020-06-16 10:18:44
1129
死磕以太坊源码分析全部文章
2021-01-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人