区块链技术爱好者,智能合约安全专家
SmartRaiden 和 Lighting Network 进行去中心化跨链原子资产交换 前言 如果能够进行以太坊和比特币跨链原子资产交换,是不是一件很酷的事情? 目前链下的扩容方式有很多,最广为人知的就是比特币的闪电网络和以太坊的雷电网络,今天我就来告诉如何通过智能雷电和闪电网络来实现跨链原子资产交换。
如何为 smartRaiden 贡献代码 1.Fork 项目 登录 github 账号,并访问https://github.com/SmartMeshFoundation/SmartRaiden,然后点击右上角的 fork 按钮,等待几秒钟以后就可以在你自己的 github 账号下看到 smartraiden.
Golang WebAssembly 入门 Golang 在1.11版本中引入了 WebAssembly 支持,意味着以后可以用 go编写可以在浏览器中运行的程序,当然这个肯定也是要受浏览器沙盒环境约束的.
目录 使用 dlv 调试smartraiden 一 正常启动 smartraiden 二 dlv 调试 三 dlv attach 使用 dlv 调试smartraiden by 白振轩 使用 dlv 调试smartraiden 一 正常启动 smartraiden 二 d...
在 以太坊中合约间是可以相互调用,并且正常进行参数传递以及返回值处理. contract1.sol pragma solidity ^0.4.0; contract Test1 { uint256 public v=7; function vote(uint256 a) pu...
比特币 解锁脚本signature script 包含了那些东西? 使用 UTXO 需要私钥签名,私钥到底都签了什么东西呢?一直比较好奇. 比特币的私钥签名总共有五中类型,具体见 btcd 代码,如下: // SigHashType represents hash type bits at the end of a signature.
比特币的地址类型 这部分内容主要来自于btcutil/address.go 一直困惑比特币是如何验证交易的,看了这个地质类型算是有点豁然开朗,实际上比特币的交易验证规则还是有点复杂的,它并不像以太坊那么简单明确.
P2PK P2PKH,MS,P2SH,OP_RETURN 等的区别 1.P2PK pay_to_public_key pubkey script: OP_CHECKSIG signature script: [sig] 2.
pay-to-pubkey-hash解析 本文主要译自比特币 wiki scriptPubKey: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG scriptSig: 例如如下的raw scriptPubKey: 76A91489ABCDEFABBA...
使用mermaid描述 raiden 通道 AB,正常状态 graph LR A-- 60,100,S_100 ---B 通道 AB closed graph LR A((A)) -. 60,100 .
Markdown 语法 转载自https://zh.mweb.im/markdown.html 首先应该了解的 每一个 Markdwon 使用者都应该了解的,是 Markdown 最基本的版本,也就是最官方的版本。
solidity 中 mapping 是如何存储的 为了探测 solidity mapping 如何实现,我构造了一个简单的合约. 先说结论,实际上 mapping的访问成本并不比直接访问storage变量多花费更多的 gas.
solidity 合约注意事项 1. 栈深度 EVM 栈深度1024字(1024*256字节) 2. solidity 局部变量个数不能超过16 因为提供的指令集对于栈深度的访问不能超过16,也就是说最多把第16个字换到栈顶进行操作.
一条命令深度清理你的mac mac 用了一段时间后很快发现硬盘空间不够了,
将以太坊封装为 ERC20 TOKEN 很多 DAPP 都是在处理 ERC20接口的 token, 其实很容易将以太坊封装为 ERC20,这样就可以统一处理, 至少我目前在做的雷电网络就是这么处理的. 主要内容复制在网络https://programtheblockchain.
golang Subprocess tests Sometimes you need to test the behavior of a process, not just a function. func Crasher() { fmt.
go 笔记 defer defer 的参数绑定是在 defer 时,而不是在执行时,和 go 是一样的。 for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i) } 会输出4 3 2 1 0 make && new make 只能应用于 slice,map,channel,返回的不是指针。
如何使用 geth1.8来监听合约事件 新功能介绍 geth1.8版本带来了新的事件处理方式,使用 abigen 可以自动生成包含合约事件监听以及过滤相关代码. 这样就不用自己去写代码解析 log. 比如: abigen --sol token.
如何使用 Channel 例子来自于Concurrency is not parallelism Google Search: A fake framework v1.0 var ( Web = fakeSearch("web") Image = fakeSearch("image"...
修改vscode caipeiyu.writeCnblog ,简化博客发布 1. 安装caipeiyu.writeCnblog vscode的博客园文章发布插件WriteCnblog : https://marketplace.
TheDao 简化版解释 the Dao 合约 contract f1{ function transfer() { if (acccount[m]>=100) { m.
最近装了 firefox,电脑配置不太高,chrome 太吃内存了。 但是发现 SwitchyOmega的 pac 模式无法工作,这篇文章提到了两个思路, 其中network.dns.disableIPv6 to true经验证无效, 通过把pac 路径删掉,直接用内容可以工作,不知道为什么。
ERC223对ERC220的改进 ERC223是以太坊上最新的代币(token)接口标准,主要是为了解决ERC220代币转账丢失问题,那么怎么解决的呢,一起来看看. 1. ERC220 存在问题 ERC220接口中存在诸多转账接口,以transfer为例.
都是gasLimit惹的祸 解决一个奇怪问题Error: Number can only safely store up to 53 bits 原来好好的node endpointtest.js ,结果在新的私链上怎么都不能运行了.
以太坊系列之二十一 使用web3部署比较复杂的智能合约 搭建私链上的雷电网络 以太坊系列之二十一 使用web3部署比较复杂的智能合约 1 雷电网络智能合约简单介绍 2 remix 无法部署使用了library的contract 3 使用web3部署完整的雷电网络合约 3.
以太坊系列之二十 以太坊中的基础应用whisper 以太坊系列之二十 以太坊中的基础应用whisper 1 whisper介绍 2 whisper rpc模块 3 whisper中的消息 4 消息的加密 5 过滤器 以太坊作为一个区块链生态系统,为区块链dapp应用提供了丰富的环境,whisper就是其中一个基础性设施.
以太坊系列之十九 对p2p模块server的理解 type transport interface { // The two handshakes. doEncHandshake(prv *ecdsa.
百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3.
以太坊系列之十七: 使用web3进行智能合约的部署调用以及监听事件(Event) 上一篇介绍了使用golang进行智能合约的部署以及调用,但是使用go语言最大的一个问题是没法持续监听事件的发生. 比如我的后台程序需要监控谁给我转账了,如果使用go语言,目前就只能是轮询数据,而使用web3就简单许多,geth会把我关心的事件 主动通知给我.
以太坊系列之十六: 使用golang与智能合约进行交互 以太坊系列之十六: 使用golang与智能合约进行交互 此例子的目录结构 token contract 智能合约的golang wrapper 部署合约 1.
以太坊数据库中都存了什么 以太坊使用的数据库是一个NOSQL数据库,是谷歌提供的开源数据leveldb. 这里尝试通过分析以太坊数据库存储了什么来分析以太坊可能为我们提供哪些关于区块链的API. 存储内容 NOSQL是一个key-value数据库,可以当做一个磁盘上的map数据结构.
solidity中的特殊函数 括号里面有类型和名字的是参数,只有类型是返回值. block.blockhash(uint blockNumber) returns (bytes32): hash of the given block - only works for 256 most recent blocks block.
evm指令集手册 Opcodes 结果列为"-"表示没有运算结果(不会在栈上产生值),为"*"是特殊情况,其他都表示运算产生唯一值,并放在栈顶. mem[a...b] 表示内存中a到b(不包含b)个字节 storage[p] 表示从p开始的32个字节 谨记evm虚拟机的word(字)是256位32字...
solidity中变量的存储 变量存储主要分为两个区域,一个是storage(对应指定是SLOAD,SSTORE),一个是Memory(MLOAD,MSTORE), 这和普通编程语言的内存模型是不一样的.
一步一步使用remix开发智能合约 最新版的remix(2017-8-3)只能使用在线开发了,已经没有离线版本了,并且好像在线版本要FQ才能访问(自行解决). 1.打开remix 注意地址如果是https开头的,要换成http,否则就没法访问本地的http rpc了.
从零一步一步搭建以太坊私有链 我会说明一步一步怎么做,同时说明可能的注意事项。 1.下载geth 这一步网上很多,就不细说了,windows的,linux的,mac都有。 2. 创建genesis.json 关于genesis文件的介绍,在此处:http://blog.csdn.net/sportshark/article/details/51855007有详细说明,自行查阅。
版本信息: go:1.8.3 windows: win7/64 idea-go-plugin:171.4694.61 在windows下,使用dlv进行调试的时候,如果golang程序引入了c模块,比如常用的sqlite模块,那么在调试的时候一定会发生这个错误: · Could not determine version number: could not find symbol value for runtime.buildVersion· 现在这个问题已经解决了,解决方法就是go build 的时候加入-ldflags="-linkmode internal" ,这样就可以正常调试了。
区 块 421133 的 难度 位 数值 是 402990845, 转成 十六进制 是 0x180526FD。 比特 币 的 难度 目标 是以 十六进制 数 的 前 两位 做 指数, 其余 位数 做 系数, 由 下面 公式 计算 出来: target= coefficient × 2^( 8 ×( ...
go内置的fmt.sprintf已经很强大了,但是和spew比起来还是相形见绌,这里来一个例子. import ( "fmt" "github.com/davecgh/go-spew/spew" ) func main() { scs := spew.
dial.go阅读手记 dial.go是负责和peer建立连接关系的地方,主要是实现 type dialer interface { /* peers已经有的结点 */ newTasks(running int, peers map[discover.
p2p模块 p2p模块对外暴露了Server关键结构,帮助上层管理复杂的p2p网路,使其集中于Protocol的实现,只关注于数据的传输. Server使用discover模块,在指定的UDP端口管理网络中结点的发现以及维护,discover模块能够直接和临近结点交换各自已知结点信息,从而不断的更新结点网络.
p2p的nat模块 该模块相对比较简单,因为nat的真正实现并不在此模块,主要是使用了第三方的nat-upnp和nat-pmp来实现真正的穿透(端口映射). 对外公布的接口 ```go // An implementation of nat.
使用atomic来避免lock 在程序中为了互斥,难免要用锁,有些时候可以通过使用atomic来避免锁, 从而更高效. 下面给出一个以太坊中的例子,就是MsgPipeRW,从名字Pipe可以看出, 他实际上就是一个pipe,相比大家对pipe已经比较熟悉了,我就不多解释了.
转自: http://blog.csdn.net/u010053050/article/details/52388663 http://www.rehack.cn/techshare/devtools/842.html 首先你要升级到win10周年更新版,然后安装linux子系统。
以太坊的crypto模块 该模块分为两个部分一个是实现sha3,一个是实现secp256k1(这也是比特币中使用的签名算法). 需要说明的是secp256k1有两种实现方式,一种是依赖libsecp256k1,需要cgo,另外一种是依赖github.
有三种解决方式,第一种方式最简单实用 安装新版本wslbridge 这个解决方法最简单,最实用,下载第三方wslbridge,安装即可使用. 这时再进入cmder,运行bash.exe,可以发现上下左右箭头已经可以工作了.
在程序中需要测量时间时最好使用monotime.Now()而不是time.Now(),相比之下前者更准确. 来个示例: func main() { var start, elapsed time.
RLP (递归长度前缀)提供了一种适用于任意二进制数据数组的编码,RLP已经成为以太坊中对对象进行序列化的主要编码方式。RLP的唯一目标就是解决结构体的编码问题;对原子数据类型(比如,字符串,整数型,浮点型)的编码则交给更高层的协议;以太坊中要求数字必须是一个大端字节序的、没有零占位的存储的格式(也就是说,一个整数0和一个空数组是等同的)。
github上有两个package做编码转换,都是基于iconv,用到了cgo,在linux下没有问题,在windows下用,非常麻烦。采用mingw安装libiconv也不行,一直提示找不到libiconv方法。
我们日常写代码时,经常自己去做一些优化,其实绝大多数情况都是没必要的,因为编译器比你想的聪明太多! 下面这个例子就是明证, 这个是一个求竭诚的递归写法,很多老手都会告诉你这样写性能低,应该用循环。