重放攻击问题
比特币靠不同的地址前缀可以规避重放攻击问题。 以太坊可以靠 EIP155 钱包来规避重放攻击问题。 何为重放攻击问题? 一个区块链有若干个测试网络。如果一套公私钥可以在不同的网络上通用,则可以恶意地把在测试网络中出现的 transaction 播放到主网上。如果在测试网络上有人从账户 A 转了一笔钱到账户 B,而账户 B 是一个傻瓜测试账户,私钥是由类似123456之类的种子生成的话。那么只要账户 A 在主网中的余额大于这笔钱,心怀恶意者就能把主网中 A 的钱财转走,从主网中的账户 B 里把钱取出来。即使心怀恶意者没有 B 的取款方法,也能让账户 A 蒙受资金损失。 所以不要跨网使用相同的公私钥对。
UTXO 与 account balance 模型
UTXO 简介 UTXO 的全称的 unspent transaction output,就是没有被人用过的可用资金。 这个模型是比特币首创的,被其他货币所模仿。以太坊天然的模型不是 UTXO 而是 account balance。 UTXO 必须配平,UTXO 的输入者必须上一个 UTXO 的输出者: 这就把一个一个账户型数据库,转成了链式的交易数据库,交易要靠 merge 整个数据库的相关节点。 UTXO 的好处是: 更加好的隐私模型 更加强的并发范型(因为不会触发间隙锁了吗?) ZCash 的 UTXO ZCash 也一样有 UTXO,但它的 UTXO 是加密过的,而且每个矿工那里还有一个专门的 UTXO 作废数据库。具体情况见《不是程序员也能看懂的ZCash零知识证明》。 ##以太坊中的 account 模型## 以太坊没有使用 UTXO 模型,而使用 account balance 模型,他们把 account balance 模型称为 world state。account balance 模型比 UTXO 模型更加容易实现智能合约,...
重新学习 Solidity
以下内容还是从 Solidity 文档里摘出来的。 智能合约入门/介绍 第一个基本的例子 12345678910111213pragma solidity ^0.4.0;contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public constant returns (uint) { return storedData; }} 一个 contract 可以被认为是一个类型。 默认的 unint 就是256位的。 storedData 可以被认为是 state variable,状态变量。在 Solidity 的概念里面,这个东西可以被认为是数据库里面的一个槽,可以被函数查询和修改。注意看它不是 public 的,所以没有合成方法。 访问状态变量不需要用 this前缀(在什么 scope 下都不需要吗?)。 ...
语义版本化问题
语义化版本 2.0.0 《语义化版本 2.0.0》,三段版本号语义: 版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容的 API 修改, 次版本号:当你做了向下兼容的功能性新增, 修订号:当你做了向下兼容的问题修正。 先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。
以太坊为什么会有 gas 系统?
根据官方文档: Gas One important aspect of the way the EVM works is that every single operation that is executed inside the EVM is actually simultaneously executed by every full node. This is a necessary component of the Ethereum 1.0 consensus model, and has the benefit that any contract on the EVM can call any other contract at almost zero cost, but also has the drawback that computational steps on the EVM are very expensive. Roughly, a good heuristic to use is that you will not be able to do anyth...
《以太坊到底是如何工作》读书笔记
《以太坊到底是如何工作》 以太坊的简单定义 transactional singleton machine with shared-state 事务性状态共享的单例机器 实际上就是逻辑上唯一,但物理上由多个节点维护的共识中的 world computer。这台机器的状态是由事务变迁驱动的: 幽灵协议 “GHOST” = “Greedy Heaviest Observed Subtree” 简而言之,就是只在拥有最大计算量的路径上进行计算(这个协议是从比特币那里来的吗?)。 账户与事务 外部账户由私钥控制,内部账户由代码控制。 外部账户可以主动发起事务,内部账户只有收到事务以后才能发起内部事务。 账户的状态构成 一个账户的状态总是由四个组件构成: nonce:如果这是个外部账户,则这个数字代表了这个账户地址发出的事务数。如果这是个合约账户,则这个数字代表了这个账户创造的合约数量。这两种情况下,nonce 都不是随机数。 balance:这个地址拥有的 Wei 数量。一个以太币有个 1e+18 Wei。 storageRoot:默认为空。Merkle Patricia 树的根。...
IOTA
IOTA 简介 IOTA 是下一代(第三代)加密货币,只做货币,不做其他用途的链(?)。专注于解决机器与机器(M2M)之间的交易问题。通过实现机器与机器间无交易费的支付来构建未来机器经济(machine economy)的蓝图,即物联网 + 数字货币的经济生态。物联网天然就有分布式特性,很适合搞区块链。 德国团队创立,由德国政府资助的一个中心化的研究去中心化下一代加密货币的项目。团队成员的上一个作品是第一代 POS 货币未来币(NXT)。 IOTA 的发行量极大,IOTA总供应量为(3 ^ 33-1)/ 2 或2,779,530,283,277,761个。所有IOTA都是在初始块创建的,总数不变,也不用开采。IOTA初上市的时候只募集到五十万美金,所以早期投资者的投资回报极高。有意思的是,因为 IOTA 基金会是非盈利组织,他们甚至没有锁定货币,所以他们持有的百分之五的 IOTA 代币,还是其他投资者捐献给基金会用以维持基金会运行的。 IOTA 的优势是,免手续费且使用平行验证而提高了性能,胜过了手续费高而清算速度缓慢的比特币。但因为它的安全模型弱于比特币,所以没有在普通交易场景...
闪电网络、侧链、隔离见证与大区块扩容问题
闪电网络 闪电网络的原理 闪电网络就是在链外专门设置一个通道(channel),所有的交易都在链上进行,只有最终结算在链上进行。这就好像我们的计算机体系结构里面加入的一个工作内存和主内存的 hiarachy。 过程描述如下: 假设我和你,咱俩人经常交易,于是就在闪电网络上开个通道,容量是2BTC; 通道里面AB在总量不超过2BTC的情况下随便相互收发,所有操作送到一个具有AB多重签名的地址,每次操作签名就好; 通道里面的操作没有手续费,因为真实的BTC在链上其实没动过,通道里面的操作本质上是只是对俩人那两个BTC份额所有权的交易; 等啥时候AB不想交易了,把隧道关闭,去真实的比特币主链上兑换一下自己在那两个BTC里的份额就好; 高手续费只发生在打开,或是关闭一个通道的时候。 为什么闪电网络会不安全 这种侧链的出现,必然会导致庞大的中间人出现: 网络上会演化出一些大的中间人节点,这些节点有足够多的BTC,足够的流动性,和足够多的通道数量,所以你再也不用担心高额的手续费,自己去找中间人等等一系列麻烦。 然而这些节点,和矿工不一样,他们并不和你直接交易BTC,他们更像是一种“第...
EOS 相关问题
石墨烯(graphene,读作gurafin,没有尾音 i)技术本身是由 cryptonomex 开发的一个库,目前已经有国内的开发者开始使用它来开发公有链相关的基础设施。BM-丹尼尔•拉里默(Dan Larimer)是 cryptonomex 的创始人。 EOS 声称自己具有以下几个优点: 不易分叉 高 TPS 可以平滑升级 EOS 的365天众筹模式可以让 EOS 团队负成本的操盘。EOS 总量是无限的,(据说)增发的部分只是给矿工创造价值。
推荐算法笔记
分类的话: 用户画像算法 用户画像算法、聚类算法 分类算法: gbtd、随机森林 识别完了看哪个变量更重要。要有可解释性。 价格相关数据:体现在什么方面?一定要跟收入密切相关的。要对数据和业务的理解很重要。 分类项目:部分已知,有一部分训练集,用未知的和已知的做一个比较。打标签。寻找标签里最重要的因素。 gbtd(底层是很多决策树)。svm。dnn。可能解释性那么强。 决策树。xgbox。 输出是:分类的概率。 聚类项目:完全未知,从数据本身来发现特征。k-means。层次聚类。 输出是:不同类别的特征。 要理解商业逻辑。