随笔分类 - 区块链
摘要:原文标题:《The Architecture of a Web 3.0 application》 原文编译:律动研究院 应用架构中的每一个组件都决定着应用的底层属性 大家对于区块链、智能合约、IPFS、钱包、节点等这些名词都不陌生,也大概明白他们都是做什么的,然而他们是如何联动起来服务于 Web3.
阅读全文
摘要:Truffle安装环境要求: python solc testrpc node.js git g++ npm libssl-dev nvm 使用NVM安装Node.js和npm 1 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35
阅读全文
摘要:安装准备:go,git 通过PPAs安装geth 1 $ sudo add-apt-repository -y ppa:ethereum/ethereum 2 $ sudo apt-get update 3 $ sudo apt-get install ethereum 创建自己的私有链 创建创世文
阅读全文
摘要:项目相关介绍请查看https://github.com/MultiChain/multichain-web-demo,简单来说就是multichain节点的网页可视化。 第一步:安装Apache 1 # 安装Apache2 2 sudo apt-get install apache2 3 # 重启A
阅读全文
摘要:部分代码(transaction.go文件中定义交易结构): 1 type TXInput struct { 2 TXID []byte //交易id 3 Index int64 //output的索引 4 Address string //解锁脚本,先使用地址来模拟 5 } 6 7 type TX
阅读全文
摘要:传统转账: 传统银行的每个账户都会有一个数据库表来存储用户的信息,包括姓名,卡号,余额等基本信息,每产生一笔交易后,最终都会更新这个余额字段,这个数据表就是这个账户的存储结构。 转账成功与否只看这个字段的金额是否足够即可,不用把整个钱的来源检验一遍。 比特币转账: 比特币的数据库中只有交易,没有这个
阅读全文
摘要:命令行demo代码: 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 ) 7 8 func main() { 9 //返回的是数组 10 cmds := os.Args 11 12 //通过字符比较,去选择执行相应的程序 13 for i, cmd := r
阅读全文
摘要:迭代器分析: 作用:遍历容器,将数据逐个返回,防止一次性加载到内存,所以一点一点读取。 类比于for循环里面的range 区块链迭代器图示如下,最初指向最后一个区块,返回区块,指针前移,直至第一个区块。 部分代码(blockchain.go文件中定义和创建迭代器): 1 //定义一个区块链的迭代器,
阅读全文
摘要:部分代码(blockchain.go文件中改写addblock函数): 1 //V3版本 2 func (bc *BlockChain) AddBlock(data string) { 3 bc.db.Update(func(tx *bolt.Tx) error { 4 //所有的操作都在这里 5
阅读全文
摘要:部分代码(block.go文件中添加序列化与反序列化): 1 //序列化,将区块转换为字节流 2 func (block *Block) Serialize() []byte { 3 4 var buffer bytes.Buffer 5 6 //定义编码器 7 encoder := gob.New
阅读全文
摘要:部分代码(gob.go文件中创建一个gob的demo实现序列化与反序列化的功能): 1 package main 2 3 import ( 4 "encoding/gob" 5 "bytes" 6 "log" 7 "fmt" 8 ) 9 10 //1. gob是go语言内置的编码包 11 //2.
阅读全文
摘要:部分代码(改写blockchain.go文件,修改获取区块的方式): 1 package main 2 3 import ( 4 "beijing_go_term2/bolt" 5 "fmt" 6 "log" 7 ) 8 9 //V1,V2版本 10 ////创建区块链,使用Block数组模拟 11
阅读全文
摘要:当前版本问题: 区块在内存中,每次执行完程序就释放,无法重用 创建区块不灵活,在main中写死,无法随意添加区块 V3版本思路: Bolt数据库介绍:轻量级、开源、go语言实现、key->value进行读取(map)[ ]byteè[ ]byte BlockChain结构重写 NewBlockCha
阅读全文
摘要:部分代码(proofofwork.go文件中使用Bits推导难度值): 1 const Bits = 20 2 3 func NewProofOfWork(block *Block) *ProofOfWork { 4 pow := ProofOfWork{ 5 block: block, 6 } 7
阅读全文
摘要:部分代码(proofofwork.go文件中IsValid函数实现): 1 func (pow *ProofOfWork) IsValid() bool { 2 //在校验的时候,block的数据是完整的,我们要做的是校验一下,Hash,block数据,和Nonce是否满足难度值要求 3 4 //获
阅读全文
摘要:部分代码(proofofwork.go文件中Run函数实现): 1 //这是pow的运算函数,为了获取挖矿的随机数,同时返回区块的哈希值 2 func (pow *ProofOfWork) Run() ([]byte, uint64) { 3 //1. 获取block数据 4 //2. 拼接nonc
阅读全文
摘要:V1版本问题: 随机数的难度值是随便写的 区块的哈希值是无规则的 V2版本思路: 1.POW(工作量证明) A. block B. 目标值 2.创建POW的函数 NewProofOfWork(参数) 3.不断计算hash的函数 Run() 4.一个校验函数 IsValid() 部分代码(proofo
阅读全文
摘要:部分代码(Join函数优化): 1 //为了生成区块哈希,实现一个简单的函数,来计算哈希值,没有随机值,没有难度值 2 func (block *Block) SetHash() { 3 //var data []byte 4 ////类型是byte,而数据结构是uint64,所以构建一个工具类,将
阅读全文
摘要:部分代码(补充区块字段): 1 //定义区块结构 2 type Block struct { 3 //区块版本号 4 Version uint64 5 //前区块哈希 6 PrevBlockHash [] byte 7 //先填写为空,后续v4的时候使用 8 MerKleRoot [] byte 9
阅读全文

浙公网安备 33010602011771号