比特币钱包到底是什么?
大家可能知道比特币就是区块链上的一个账本。那我们先来看一个,它到底长什么样?
因为比特币的账本是完全公开的,所以我们随便找一个钱包地址,看一下:
1DrtPCLLBbeBwHKPKfgq94LT7AGWRK8zzL
经典比特币的钱包地址都是1开头的,而如果最近大家看到3开头的地址,就是隔离见证(SegWit)的地址。
有很多网站(比如blockchain.info)提供区块查看,我们来看看这个钱包里都有些啥https://blockchain.info/address/1DrtPCLLBbeBwHKPKfgq94LT7AGWRK8zzL
能看到这个地址上,共有135笔交易,总共收到过139.2枚比特币,然后下面列出了地址上所有的交易。这个地址上当前的余额是0.560741,这个余额是计算出来的,它没有记录在任何地方!也就是说,你的钱包里有多少钱,是没有存在任何地方的。当你转账的时候,矿工检查你有没有足够多的『余额』支持这笔交易,其实看的是你这个地址之前所有的『交易』,一笔一笔的增减,这其实是比特币设计的一个很聪明的地方。因为如果交易没有被打包(记账),或者打包之后整个区块被丢弃,你不用担心,转账失败之后钱丢了。没有了交易,你的『钱』自然就回来了。
只要有地址,任何人都能看到这个钱包里有多少钱。所以,我们可以简单的认为:
钱包 = 地址(能查看) + 私钥(能转账)
如果大家只是想用钱包APP来方便查看自己的多个地址上的比特币,其实完全不用导入私钥,这样能减少资产被盗的风险。那私钥又是什么?
你可以把钱包看成是一个玻璃做的透明保险柜,任何人都能看到里面有多少钱,每笔钱从哪里来的,以前的钱到哪里去了。那么私钥就是这个保险柜的密码,任何人有了密码就能打开它,转走里面的钱。你可以眼睁睁的看着钱转到另外一个玻璃柜子里,但毫无办法。
记住:任何时候,不要把私钥给任何人!
比如,你用一个钱包APP,导入了自己的私钥,你怎么知道这个APP不会背着你把私钥发送到其他地方?很难放心啊。
所以小码哥只敢信任3种钱包:
正规渠道下载的知名钱包,比如在google play下载的blockchain.info的钱包
千万别在各种小软件市场下载,哪怕是中国某些大厂的软件市场。很多黑客会把正常的钱包里面种上木马,你看上去是blockchain.info,但是里面有木马可能把你的私钥盗走。
冷钱包
就是钱包所在的机器是永远不联网的,我才敢把私钥放心的存里面。那冷钱包不联网,里面的钱怎么转账呢?其实很简单,比如你用一台旧手机做冷钱包,下载一个钱包APP,然后删掉手机里所有记住的WIFI,拔掉SIM卡,让手机不能上网(不要只是飞行模式,那都不安全)。这个钱包APP,能用手机的摄像头扫码二维码,就能把一笔交易在经过私钥加密后,再生成交易信息的二维码,用联网的手机扫了,就能完成转账。
开源钱包,且必须运行在自己放心的环境中。
比如我自己会用 https://coinb.in/ 提供的钱包。它是一个网站,但不是在线钱包。它的代码是开源的,你可以在github上下载。它完全是纯前端(javascript)钱包,可以运行在浏览器里。所以能看到它的代码里面有没有恶意的逻辑,也能运行在一台离线电脑/手机的浏览器里。
比特币的转账是怎么进行的?
那我们接下来用coinb.in来演示一下,比特币的转账到底是如何发送的。
打开 https://coinb.in/ 左起第一个菜单是New(新建),选Transaction(转账)
一笔比特币的转账,需要由两个部分组成:Input(输入),Output(输出)
也就是说,一笔转账由A转给B,那么A就是输入,B就是输出。
先看Input(输入),我们需要填上的是一些Transaction ID,而不是钱包地址,也就是我们之前说的,比特币钱包里面有多少钱,是没有存在任何地方的,所以你想转给别人的钱,一定是先来自某个之前的交易(另外的人转给你了,你才有钱给别人)。所以比特币的钱不会无根而生,一定有来龙去脉。
那么,我们先随便填一个交易ID,然后填上这个交易的数量(Amount),假设是1.1个BTC,接下去再填输出(Output)。
输出就容易理解一些,往哪个地址(Address)上转多少钱。一笔交易可以有多个输入,多个输出。比如我们这次随便再找个地址,填上1个BTC。下面它就自动帮你算出了,刚才输入是1.1BTC,现在输出是1BTC,那你的交易手续费(矿工费)等于是付了0.1BTC。
点击Submit(提交),就能看到绿色框里面就是生成的这笔交易的数据了。注意,这只是生成了交易的信息,这个时候交易并没有发生!我刚刚也没有用到私钥,而且地址和交易ID都是随便乱写的。绿色框右上角有个二维码按钮,点了就会出来二维码,也就是说,我们可以用冷钱包的手机来扫码,获得这个交易的数据,以便用私钥加密签名。
然后,我们可以到冷钱包里保证的这个网页上(假设通过扫二维码,把这段交易信息copy过去了)。点菜单里面的Sign(签名),就可以用你的私钥,对刚刚这段交易信息进行加密。等于就是你认可了这个交易的发生。
而这个菜单按钮旁边的Broadcast(广播),就是可以把你签名之后的交易信息从冷钱包里再生成二维码,通过扫码转移到联网的电脑上,最后广播到比特币网络中。全世界的矿工都能接收到这笔交易,大家会先验证这个交易是否合法(比如输入是否存在『双花』,说白了就是钱之前已经花了,转账余额不足),如果一切正常,然后就打包。
你这笔交易被打包,且有多次确认后,就可以认为转账交易已经成功。因为全世界都见证了这个交易的发生,再也不能被撤销。
这是最原始也是最安全的钱包使用方式,但是也是最『麻烦』的方式。如果你对当前使用环境的安全有保证,这都是可以在线完成。而且coinb.in也提供了更简单的『钱包』管理方式。只需要用你自己的邮箱和密码(密码不是私钥),它能帮你自动用算法生成地址与私钥,完成钱包管理。
比如我随便输一个邮箱和密码(2次确认),点提交就好。这并不是在『注册帐号』,因为你可以拔掉网线、关掉WIFI也能完成这个操作。没有任何地方会帮你存密码,你也永远无法找回密码。如果忘记了密码,也没有备份私钥,里面的钱就丢了。(说『丢』了有点不合适,应该是你能眼睁睁看到钱就在那里,但是永远无法花出去——转给别人)
这个钱包里,就是大家熟悉的,填上给哪个地址转多少钱,给多少矿工费。这里点发送就是真的发送了哦!因为它会自动帮你完成签名、广播的操作。
比特币转账多久能到?
这是很多人用比特币转账不习惯的地方。它不像你用支付宝转账,咻!一下对方就收到了。因为支付宝是中心化的服务,阿里说你转了就是转了,阿里服务器挂了就没了。
你能在网上看到当前比特币网络里有多少未被确认的交易。目前是4万多笔,半个月前拥堵的时候,这个数字是16万笔。也就是说,当前有很多交易,都是还没有被确认和打包的。访问这里,你能看到下面biu~biu~biu的不停有交易被广播出来。
https://blockchain.info/unconfirmed-transactions
这个时间就不一定了。它跟几个因素有关:
比特币网络预期是10分钟一个块,但不是绝对的,但有可能当前矿工们运气都不好,一个小时都不出块(也可能运气好,一分钟就挖出块了)。
你给的矿工费也会决定速度。因为这么多未打包的交易,矿工肯定是按照给钱的多少来排,给钱越多,排在越前面,先打包的可能性越大。如果给的太少。。。呵呵,永远轮不到你也是有可能的。那你的这笔交易就一直处于未确认的状态,不过放心,钱丢不了。