工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表全部文章

etherenum钱包安装

 etherenum钱包安装

https://github.com/ethereum/go-ethereum/archive/v1.5.4.tar.gz
 
 geth
geth -datadir "D:ethereum"
geth account new
geth account list
geth wallet import
geth console
 
get attach
net.listening
net.peerCount
admin.peers
admin.nodeInfo
eth.blockNumber
eth.accounts
 
创建用户:
personal.newAccount("111111")
其中参数为此账户的密码。
也可以先创建账户,然后输入密码:
personal.newAccount()
 
查看账户余额
其中参数为区块链地址
eth.getBalance("0x7d1f7be4112ce63b9de04a0bf95c1e87e430bd1b")
eth.getBalance(eth.accounts[0])
 
personal.unlockAccount(eth.accounts[0], '123456')
 
启动挖矿
miner.start()
miner.stop()
 
首先,输入geth console,回车。
方法一:
然后,解锁账户。输入personal.unlockAccount(addr, passwd, duration),addr是你的地址,passwd是账户密码,duration是账户处于解锁状态的时间,例如300表示在300秒内无需再次解锁。建议在记事本中写完此命令,复制到geth中。成功解锁账户,界面会返回 true。
 
 
testrpc. 用geth可以创建一个测试网络,另一种更快的创建测试网络的方法是使用testrpc. Testrpc可以在启动时帮你创建一堆存有资金的测试账户。它的运行速度也更快因此更适合开发和测试。你可以从testrpc起步,然后随着合约慢慢成型,转移到geth创建的测试网络上 - 启动方法很简单,只需要指定一个networkid:geth --networkid "12345"。这里是testrpc的代码仓库,下文我们还会再讲到它。
 

go linux 安装

 wget -c http://golangtc.com/static/go/1.7.4/go1.7.4.linux-amd64.tar.gz

tar zxvf go1.7.4.linux-amd64.tar.gz
 
vi .bashrc
export GOROOT=/root/go
export PATH=$GOROOT/bin:$PATH
export GOPATH=/root/go/src
 
 
yum install -y mercurial
yum install -y git

快速同步以太坊区块链:Geth长期节点连接方法

为了帮助国内的同学们以最快的速度同步以太坊的区块链,EthFans社区建立了一个长期节点,地址为:

enode://91922b12115c067005c574844c6bbdb114eb262f90b6355cec89e13b483c3e4669c6d63ec66b6e3ca7a3a462d28edb3c659e9fa05ed4c7234524e582a8816743@120.27.164.92:13333设置为默认连接节点

如果你是geth用户,可以做如下设置,默认连接这个节点:
  • 找到你的data目录,例如linux上默认是~/.ethereum
  • 在data目录里面新建一个static-nodes.json文件,输入以下内容并保存:
    ["enode://91922b12115c067005c574844c6bbdb114eb262f90b6355cec89e13b483c3e4669c6d63ec66b6e3ca7a3a462d28edb3c659e9fa05ed4c7234524e582a8816743@120.27.164.92:13333"]
  • 如常启动geth即可

检查是否连接成功

  • 通过geth console进入控制台,或者通过geth --ipcpath ~/.ethereum/geth.ipc attach开控制台挂上当前进程
  • 控制台中输入:admin.peers.forEach(function(p) {console.log(p.network.remoteAddress);})
  • 如果打印出的地址里面包括120.27.164.92, 说明已经连上
更多连接设置可以参考文档: [color=rgb(0, 105, 214) !important]https://github.com/ethereum/go-ethereum/wiki/Connecting-to-the-network
链接该节点的第二个方法:
首先,用geth命令打开命令行钱包,然后新建一个终端窗口,输入命令 geth attach。
然后,在新窗口中输入命令行admin.addPeer("enode://91922b12115c067005c574844c6bbdb114eb262f90b6355cec89e13b483c3e4669c6d63ec66b6e3ca7a3a462d28edb3c659e9fa05ed4c7234524e582a8816743@120.27.164.92:13333"),enter键。
最后,检查是否连接成功。输入命令行 admin.peers,enter键。查看列出的节点中有没有上面的节点。
参考文档:[color=rgb(0, 105, 214) !important]https://ethereum.gitbooks.io/frontier-guide/content/connecting.html

 

http://ethfans.org/topics/150

比特币基本概念

 

椭圆曲线数字签名算法

椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线对数字签名算法(DSA)的模拟,该算法是构成比特币系统的基石。

私钥

非公开,拥有者需安全保管。通常是由随机算法生成的,说白了,就是一个巨大的随机整数,256位、32字节。大小介于1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的数,都可以认为是一个合法的私钥。于是,除了随机方法外,采用特定算法由固定的输入,得到32字节输出的算法就可以成为得到私钥的方法。于是,便有了迷你私钥(Mini Privkey),原理很简单,例如,采用SHA256的一种实现:

private key = SHA256()

迷你私钥存在安全问题,因为输入集合太小,易被构造常见组合的彩虹表暴力破解,所以通常还是使用系统随机生成的比较好,无安全隐患。

公钥

公钥与私钥是相对应的,一把私钥可以推出唯一的公钥,但公钥却无法推导出私钥。公钥有两种形式:压缩与非压缩。

早期比特币均使用非压缩公钥,现大部分客户端已默认使用压缩公钥。这个貌似是比特币系统一个长得像feature的bug,早期人少活多代码写得不够精细,openssl库的文档又不足够好,导致Satoshi以为必须使用非压缩的完整公钥,后来大家发现其实公钥的左右两个32字节是有关联的,左侧(X)可以推出右侧(Y)的平方值,有左侧(X)就可以了。

现在系统里两种方式共存,应该会一直共存下去。两种公钥的首个字节为标识位,压缩为33字节,非压缩为65字节。以0×04开头为非压缩,0×02/0×03开头为压缩公钥,0×02/0×03的选取由右侧Y开方后的奇偶决定。

压缩形式可以减小Tx/Block的体积,每个Tx Input减少32字节。

签名

使用私钥对数据进行签署(Sign)会得到签名(Signature)。通常会将数据先生成Hash值,然后对此Hash值进行签名。签名(signature)有两部分组成: R + S。由签名(signature)与Hash值,便可以推出一个公钥,验证此公钥,便可知道此签名是否由公钥对应的私钥签名。

通常,每个签名会有三个长度:73、72、71,符合校验的概率为25%、50%、25%。所以每次签署后,需要找出符合校验的签名长度,再提供给验证方。

地址

地址是为了人们交换方便而弄出来的一个方案,因为公钥太长了(130字符串或66字符串)。地址长度为25字节,转为base58编码后,为34或35个字符。base58是类似base64的编码,但去掉了易引起视觉混淆的字符,又在地址末尾添加了4个字节校验位,保障在人们交换个别字符错误时,也能够因地址校验失败而制止了误操作。

由于存在公钥有两种形式,那么一个公钥便对应两个地址。这两个地址都可由同一私钥签署交易。

公钥生成地址的算法:

Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111
Key hash = Version concatenated with RIPEMD-160(SHA-256(public key))
Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))
Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)

下图是非压缩公钥生成地址的过程:

6290a5ea-f93a-11e2-9ac4-835e86a38642

对于压缩公钥生成地址时,则只取公钥的X部分即可。

推导关系

三者推导关系:私钥 >> 公钥 >> 两个地址。过程均不可逆。拥有私钥便拥有一切,但通常为了方便,会把对应的公钥、地址也存储起来。

交易

比特币的交易(Transation,缩写Tx),并不是通常意义的交易,例如一手交钱一手交货,而是转账。交易由N个输入和M个输出两部分组成。交易的每个输入便是前向交易的某个输出,那么追踪到源头,必然出现一个没有输入的交易,此类交易称为CoinBase Tx。CoinBase类交易是奖励挖矿者而产生的交易,该交易总是位于Block块的第一笔。

7c9c862e-f61b-11e2-9dfe-324d025e5dd3

拥有一个输入与输出的Tx数据:

Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501

Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG
一旦某个Tx的第N个输出成为另一个Tx的输入,那么该笔比特币即为已花费。每个交易有唯一Hash字符串来标识,通过对交易数据做两次SHA256哈希运算而来:

Tx Hash ID = SHA256(SHA256(Tx Data))

矿工费

矿工费(Transaction Fee)是鼓励矿工将Tx打包进Block的激励报酬。计算一笔交易的矿工费:

Transaction Fee = SUM(Input’s amount) – SUM(Output’s amount)
每笔Tx的矿工费必然大于等于零,否则该笔Tx即为非法,不会被网络接收。

数据块

数据块(Block)是存储Block Meta与Tx的地方。Block的第一笔Tx总是CoinBase Tx,因此Block中的交易数量总是大于等于1,随后是这段时间内网络广播出来的Tx。

找到合适的Block是一件非常困难的事情,需要通过大量的数学计算才能发现,该计算过程称为“挖矿”。首个发现者,会得到一些比特币作为奖励。

数据链

多个Block连接起来成为数据链(Block Chain)。

94b6ba76-f621-11e2-95b0-febc373535b7

为了引入容错与竞争机制,比特币系统允许Block Chain出现分叉,但每个节点总是倾向于选择最高的、难度最大的链,并称之为Best Chain,节点只认可Best Chain上的数据。

首个Block称为Genesis Block,并设定高度为零,后续每新增一个Block,高度则递增一。目前是不允许花费Genesis Block中的比特币的。

每个Block中的Tx在此Block中均唯一
一个Tx通常只会在一个Block里,也可能会出现在多个Block中,但只会在Best Chain中的某一个Block出现一次

货币存储

比特币是密码货币、纯数字化货币,没有看得见摸得着的硬币或纸币。一个人持有比特币意味着:

其拥有一些地址的私钥
这些地址是数笔交易的输出,且未花费
所有货币记录均以交易形式存储在整个blockchain数据块中,无交易无货币。货币不会凭空产生,也不会凭空消失。遗失了某个地址的私钥,意味着该地址上的Tx无法签署,无法成为下一个Tx的输入,便认为该笔比特币永久消失了。

货币发行

既然所有交易的输入源头都是来自CoinBase,产生CoinBase时即意味着货币发行。比特币采用衰减发行,每四年产量减半,第一个四年每个block的coinbase奖励50BTC,随后是25btc, 12.5btc, …并最终于2140年为零,此时总量达到极限为2100万个btc。

153fcb3e-f621-11e2-8322-0b2f2f425ef7

减半周期,严格来说,并不是准确的四年,而是每生成210000个block。之所以俗称四年减半,是因为比特币系统会根据全网算力的大小自动调整难度系统,使得大约每两周产生2016个block,那么四年约21万块block。

该函数GetBlockValue()用于计算挖得Block的奖励值:

int64 static GetBlockValue(int nHeight, int64 nFees)
{
int64 nSubsidy = 50 * COIN;

// Subsidy is cut in half every 210000 blocks, which will occur approximately every 4 years
nSubsidy >>= (nHeight / 210000);

return nSubsidy + nFees;
}
当达到2100万btc以后,不再有来自CoinBase的奖励了,矿工的收入来源仅剩下交易的矿工费。此时,每个block的收入绝对值btc很低,但此时比特币应当会非常繁荣,币值也会相当的高,使得矿工们依然有利可图。

杜绝多重支付

传统货币存在多重支付(Double Spending)问题,典型的比如非数字时代的支票诈骗、数字时代的信用卡诈骗等。在比特币系统里,每笔交易的确认均需要得到全网广播,并收录进Block后才能得到真正确认。每笔钱的花销,均需要检测上次输入交易的状态。数据是带时间戳的、公开的,BlockChain由巨大的算力保障其安全性。所以比特币系统将货币的多重支付的风险极大降低,几近于零。通过等待多个Block确认,更是从概率上降低至零。一般得到6个确认后,可认为非常安全。但对于能影响你人生的重大支付,建议等待20~30个确认。

匿名性

任何人均可以轻易生成大量的私钥、公钥、地址。地址本身是匿名的,通过多个地址交易可进一步提高匿名性。但该匿名性并不像媒体宣传的那样,是某种程度上的匿名。因为比特币的交易数据是公开的,所以任何一笔资金的流向均是可以追踪的。

不了解比特币的人为它的匿名性产生一些担忧,比如担心更利于从事非法业务;了解比特币的人却因为它的伪匿名性而苦恼。传统货币在消费中也是匿名的,且是法律保障的,大部分国家都不允许个人涂画纸币。

地址本身是匿名的,但你可以通过地址对应的私钥签名消息来向公众证明你拥有某个比特币地址。

作者:Kevin

区块链地址生成算法

 地址是为了人们交换方便而弄出来的一个方案,因为公钥太长了(130字符串或66字符串)。地址长度为25字节,转为base58编码后,为34或35个字符。base58是类似base64的编码,但去掉了易引起视觉混淆的字符,又在地址末尾添加了4个字节校验位,保障在人们交换个别字符错误时,也能够因地址校验失败而制止了误操作。

由于存在公钥有两种形式,那么一个公钥便对应两个地址。这两个地址都可由同一私钥签署交易。
公钥生成地址的算法:

Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111 Key hash = Version concatenated with RIPEMD-160(SHA-256(public key)) Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash)) Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)

下图是非压缩公钥生成地址的过程:

对于压缩公钥生成地址时,则只取公钥的X部分即可。

推导关系

三者推导关系:私钥 >> 公钥 >> 两个地址。过程均不可逆。拥有私钥便拥有一切,但通常为了方便,会把对应的公钥、地址也存储起来。

-----------------------以下来源于百度http://zhidao.baidu.com/link?url=-iAaP8yzPO7NI4ruKOtmowXhR4FONK5cdx7IqFWkHuCwA8XFt9I82LOlGAGoJko06gQxs5qI0lKtvr8ndC0Qp76eW0rg_lx7CTf9FVyaF2u ---------------
比特币地址的生成过程

(说明: 有些数字以"0x"开头,意思是此数字使用十六进制表示法。"0x"本身没有任何含义,它是C语言流传下来的,约定俗成的写法,比如0xA就是十进制的10。另外,1个字节 = 8位二进制 = 2位十六进制)。

第一步,随机选取一个32字节的数、大小介于1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间,作为私钥。
18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725

第二步,使用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥所对应的非压缩公钥。 (共65字节, 1字节 0x04, 32字节为x坐标,32字节为y坐标)关于公钥压缩、非压缩的问题另文说明。

0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B
23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

第三步,计算公钥的 SHA-256 哈希值
600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

第四步,取上一步结果,计算 RIPEMD-160 哈希值
010966776006953D5567439E5E39F86A0D273BEE

第五步,取上一步结果,前面加入地址版本号(比特币主网版本号“0x00”)
00010966776006953D5567439E5E39F86A0D273BEE

第六步,取上一步结果,计算 SHA-256 哈希值
445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094

第七步,取上一步结果,再计算一下 SHA-256 哈希值(哈哈)
D61967F63C7DD183914A4AE452C9F6AD5D462CE3D277798075B107615C1A8A30

第八步,取上一步结果的前4个字节(8位十六进制)
D61967F6

第九步,把这4个字节加在第五步的结果后面,作为校验(这就是比特币地址的16进制形态)。
00010966776006953D5567439E5E39F86A0D273BEED61967F6

第十步,用base58表示法变换一下地址(这就是最常见的比特币地址形态)。

16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

------------------------------来自于以太坊黄皮书-------------------------------------------------------
以太坊地址生成算法


------------------------------来自于以太坊白皮书------------------------------------------------------------------------
https://github.com/ethereum/wiki/wiki/White-Paper#ethereum-accounts

Ethereum Accounts

In Ethereum, the state is made up of objects called "accounts", with each account having a 20-byte address and state transitions being direct transfers of value and information between accounts. 
以太坊中,账户包含20字节的地址,以及账户之间价值和信息的传递的状态转换。

An Ethereum account contains four fields:
The nonce, a counter used to make sure each transaction can only be processed once
The account's current ether balance
The account's contract code, if present
The account's storage (empty by default)
以太坊账户包含4个部分:
nonce 是一个计数器用于确保每笔交易只被处理一次
账户当前以太币数量
合约代码
以太坊存储空间?

"Ether" is the main internal crypto-fuel of Ethereum, and is used to pay transaction fees. 
以太币是以太坊中的主要密码货币,用于支付交易费用

In general, there are two types of accounts: externally owned accounts, controlled by private keys, and contract accounts, controlled by their contract code. An externally owned account has no code, and one can send messages from an externally owned account by creating and signing a transaction; in a contract account, every time the contract account receives a message its code activates, allowing it to read and write to internal storage and send other messages or create contracts in turn.
以太坊中有两种账户:外部用户的账户,通过私钥控制;智能合约账户,通过合约代码控制。
外部用户账户不包含代码,用户可以通过创建和签署交易来给外部用户账户发送信息。
合约账户,每次接受到信息时,合约代码开始工作,允许读取、写入内部存储,已结发送信息,或者反过来创建合约。

Note that "contracts" in Ethereum should not be seen as something that should be "fulfilled" or "complied with"; rather, they are more like "autonomous agents" that live inside of the Ethereum execution environment, always executing a specific piece of code when "poked" by a message or transaction, and having direct control over their own ether balance and their own key/value store to keep track of persistent variables.
注意以太坊中的合约不应该被视为某种可以被完成,被遵守的恭喜。它们更像是以太坊环境的自治代理机构。能够直接控制它们的以太币和秘钥来追踪持续变量。

区块链匿名技术

 2.1 Darkcoin

Darkcoin使用的匿名技术是:Darksend引入了Coinjoin分布式混币服务。Coinjoin的混币,分析者有可能通过输入地址的金额和输出地址的金额对比,分析出混币的输入和输出地址对。另外Darksend不开源,有纪录混币历史的可能性;

而暗网币的环签名则是块链上的混币服务,这种混币具有相同金额的输入,并且使用了多个别人的公钥,只知道是从这一群人中的一个发送的,但无法判断是哪一个,也无法通过金额分析来判断输入输出对。暗网币还支持TOR和TRR技术,引入了隐身地址,比Darkcoin的匿名性强。

2.2 Zerocoin/Zerocash

Zerocoin是一种去中心化的混币技术,把一定数量如1个比特币转化为zerocoin,采用零知识证明技术花费zerocoin或转化为其他zerocoin,使得在零币之中的交易不可追踪。Zerocoin是一种全新匿名技术,但远远未到实用阶段,原因如下:
(1)性能问题,zerocoin零知识证明,至少占45KB空间和450ms的验证时间(128位的密钥长度),必须全网广播和存贮,并且由每个节点验证,将带来巨大的块链长度和验证时间。
(2) Zerocoin的局限性。Zerocoin不能用来支付,不能拆分金额,不能隐藏金额,可以通过金额对比来获得混币输入和输出地址的对应关系。

Zerocash是Zerocoin的升级版本,使用密码学承诺,把零知识证明所需容量减少了97.7%,把验证速度减少了98.6%,可以用来支付,输入金额可变,可以隐藏输入金额,比Zerocoin先进了许多。

Zerocoin/Zerocash存在两个致命问题。第一是它们的初始数据定义,必须定义一个数N,由P和Q两个质数相乘得到,如果N足够大,别人就无法推断出P和Q,也就无法双花。但初始生成人不能保存P和Q值,否则可以随意双花,而且无法检测。但是无法验证P和Q是否被保存了。第二个问题是,Zerocoin/Zerocash的开发团队由政府官方资助,这很让人担心。

2.3 Bytecoin

Bytecoin是最早引入环签名和隐身地址的加密货币。暗网币就是在Bytecoin基础之上进行开发和创新的。Bytecoin不支持Tor,通讯未加密,无法隐匿上网地址,容易被协议监听,从而分析钱包地址和IP地址的对应关系。
Bytecoin是命令行钱包,使用上不方便,暗网币有图形化钱包、即将推出在线钱包、手机钱包和轻钱包。
Bytecoin没有块链应用,仅为匿名而匿名。我们认为匿名技术是一个基础技术,在其上发展多种应用如P2P兑换所、块链商城等,才有可能让匿名币更广泛地被用户所接受。
2.4其他币种
Anoncoin:仅支持Tor和另一个匿名网络i2p。
Blackcoin:未采用匿名技术,并非匿名币。
Moreno:与Bytecoin一样支持环签名和隐身地址,在Bytecoin基础上发展了GPU挖矿。
Boolberry来自Bytecoin,一样支持环签名和隐身地址,但不支持TOR和TRR,没有任何匿名应用。
StealthCoin:通过StealthSend采用环签名,正在研发中。

XCurrency:通讯加密,支持环签名,不支持隐身地址。

CoinJoin维基百科英文翻译中文

 https://en.bitcoin.it/wiki/CoinJoin

CoinJoin-------------------------------------------------------------------------------------------------
CoinJoin is a method of bitcoin transaction compression which aims to improve privacy by discarding unnecessary information. A coinjoin transaction is one where multiple people have agreed to form a single transaction where some of the the outputs have the same value. A casual observer of the blockchain cannot tell which output is of interest to each sender. Unlike many other privacy solutions, coinjoin transactions do not require a modification to the bitcoin protocol.

CoinJoin是一种比特币交易压缩方法,旨在通过丢弃无用信息提高隐私保护能力。
一个CoinJoin交易是指:多个用户同意一个单独的交易,这项交易有多项相同大小的输出。
一个普通的区块链观察人员无法分辨输出和用户的对应关系。
不同于其它隐私保护方案,CoinJoin不需要修改比特币协议。


This type of transaction was first described in posts[1][2] by gmaxwell.

Motivation-------------------------------------------------------------------------------------------------
Bitcoin is often promoted as a tool for privacy but the only privacy that exists in Bitcoin comes from pseudonymous addresses which are fragile and easily compromised through reuse, "taint" analysis, tracking payments, IP address monitoring nodes, web-spidering, and many other mechanisms. Once broken this privacy is difficult and sometimes costly to recover.

Traditional banking provides a fair amount of privacy by default. Your inlaws don't see that you're buying birth control that deprives them of grand children, your employer doesn't learn about the non-profits you support with money from your paycheck, and thieves don't see your latest purchases or how wealthy you are to help them target and scam you. Poor privacy in Bitcoin can be a major practical disadvantage for both individuals and businesses.

Even when a user ends address reuse by switching to BIP 32 address chains, they still have privacy loss from their old coins and the joining of past payments when they make larger transactions.

Privacy errors can also create externalized costs: You might have good practices but when you trade with people who don't (say ones using "green addresses") you and everyone you trade with loses some privacy. A loss of privacy also presents a grave systemic risk for Bitcoin: If degraded privacy allows people to assemble centralized lists of good and bad coins you may find Bitcoin's fungibility destroyed when your honestly accepted coin is later not honored by others, and its decentralization along with it when people feel forced to enforce popular blacklists on their own coin.
隐私保护的意义,不翻译。


Concept-------------------------------------------------------------------------------------------------
The idea is very simple, first some quick background:

A Bitcoin transaction consumes one or more inputs and creates one or more outputs with specified values.
一个比特币交易消耗1个或多个输入和1个或多个输出

Each input is an output from a past transaction. For each input there is a distinct signature (scriptsig) which is created in accordance with the rules specified in the past-output that it is consuming (scriptpubkey).
每一个输入都是前一个交易的输出。对于每一个输入都有一个不同的签名scriptsig。
这个签名是由上一个交易的输出签名根据规则生成的。

The Bitcoin system is charged with making sure the signatures are correct, that the inputs exist and are spendable, and that the sum of the output values is less than or equal to the sum of the input values (any excess becomes fees paid to miners for including the transaction).
比特币系统确保签名的正确性。
输入存在,可以被使用。
输出的总价值小或者等于输入的总价值。额外的金额支付挖矿人员。

It is normal for a transaction to spend many inputs in order to get enough value to pay its intended payment, often also creating an additional 'change' output to receive the unspent (and non-fee) excess.
交易中经常会使用多个输入用于凑够足够的价值支付;
也经常会创建一个额外的输出用于接收找零。

There is no requirement that the scriptpubkeys of the inputs used be the same; i.e., no requirement that they be payments to the same address. And, in fact, when Bitcoin is correctly used with one address per payment, none of them will be the same.
输入的签名没有必要相同;
输出的签名也没有必要相同。
事实上,比特币使用在使用时每一笔交易的地址都不是相同的。

When considering the history of Bitcoin ownership one could look at transactions which spend from multiple distinct scriptpubkeys as co-joining their ownership and make an assumption: How else could the transaction spend from multiple addresses unless a common party controlled those addresses?
当考虑比特币隶属历史时,可以通过查看交易,通过co-joining的方法获得不同签名交易的隶属关系。
但是在交易来自于多个地址时怎么分辨了?除非拥有一个团体控制这些地址。

In the illustration 'transaction 2' spends coins which were assigned to 1A1 and 1C3. So 1A1 and 1C3 are necessarily the same party?
在图交易2中,支付比特币的地址时1A1和1C3,1A1和1C3一定是同一个个体么?
This assumption is incorrect. Usage in a single transaction does not prove common control (though it's currently pretty suggestive), and this is what makes CoinJoin possible:
判断是错误的。使用同一个交易不能证明相同的控制权。
这是CoinJoin方法得意实现的原因。

The signatures, one per input, inside a transaction are completely independent of each other. This means that it's possible for Bitcoin users to agree on a set of inputs to spend, and a set of outputs to pay to, and then to individually and separately sign a transaction and later merge their signatures. The transaction is not valid and won't be accepted by the network until all signatures are provided, and no one will sign a transaction which is not to their liking.
交易中每一个输入的签名对每个用户是独立的。
这意味着,比特币用户可以通过协商允许多个输入和多个输出的交易,然后每个用户独立分散的签名,最后将签名合并允许交易。
这个交易只有等所有签名都提供了,才能被判定合法并被网络接收。
如果有一个用户不同意,则不会签名。

To use this to increase privacy, the N users would agree on a uniform output size and provide inputs amounting to at least that size. The transaction would have N outputs of that size and potentially N more change outputs if some of the users provided input in excess of the target. All would sign the transaction, and then the transaction could be transmitted. No risk of theft at any point.
为了使用这种方法提高隐私保护能力,N个用户将协商同意一个标准的输入大小,并提供至少大于输出的输入。交易将拥有N个这种代销的输出以及潜在的多余N个不同的输出,当某些用户提供的输入大于目标大小。所有人签名交易,然后交易被出传播。
在任何时候都没有被盗窃的风险。

In the illustration 'transaction 2' has inputs from 1A1 and 1C3. Say we beliece 1A1 is an address used for Alice and 1C3 is an address used for Charlie. Which of Alice and Charlie owns which of the 1D and 1E outputs?
在图交易2中,有1A1 和 1C3两个输入地址,我们认为1A1是Alice的地址,1C3是Charlie的地址。
但是不能判断Alice和Charlie与两个输出地址1D和1E的对应关系。

The idea can also be used more casually. When you want to make a payment, find someone else who also wants to make a payment and make a joint payment together. Doing so doesn't increase privacy much, but it actually makes your transaction smaller and thus easier on the network (and lower in fees); the extra privacy is a perk.
这个主意可以使用的更加随意。
当你想进行一次支付时,寻找其他也想做支付的人,然后做一个合并交易。
这种做法不会增加太多的隐私保护能力,但是能够让你的的交易更小,因此更容易被网络接收,支付更少的交易费用。额外的隐私保护是一个额外收入。

Such a transaction is externally indistinguishable from a transaction created through conventional use. Because of this, if these transactions become widespread they improve the privacy even of people who do not use them, because no longer will input co-joining be strong evidence of common control.
这样的交易在常规交易中很难被察觉。
正因为如此,当这种交易被普遍使用时,即使不适用这种策略的用户也会提高隐私保护能力。
因为输入co-joining不会被作为集中控制的强有力证据。

There are many variations of this idea possible, and all can coexist because the idea requires no changes to the Bitcoin system. Let a thousand flowers bloom: we can have diversity in ways of accomplishing this and learn the best.
这种注意有很多变种,而且能够和平共处,因为不需要修改比特币系统。
我们有很多方法可以实现,能够学习到最好的办法。

区块链应用整理

 1、基于区块链技术的匿名评价系统

将区块链技术引入评价系统。
保护隐私的主要方法是使用一次性口令机制分散交易;使用盲签名对token签名,隐藏token和交易的关系。
论文题目《A Trustless Privacy-Preserving Reputation System》

2、基于区块链的域名系统
开源的基于区块链的域名DNS系统。
https://namecoin.info

3、建立一种隐私保护的基于比特币的选举系统
论文题目《How to Vote Privately Using Bitcoin》

4、基于比特币的奖励系统和评价系统
详细介绍如何使用比特币实现奖励系统和评价系统。介绍了很多关键技术问题。
论文题目《Reputation and Reward: Two Sides of the Same Bitcoin》

5、介绍如何利用比特币实现彩票
论文实际介绍利用比特币实现一种去中心化的安全多方计算,彩票只是安全多方计算的应用案例。
论文题目《Secure multiparty computations on bitcoin》