首先声明我是一个小白,刚刚学习区块链不就,下面的内容大多不是原创,是在总结了很多人的博客之后的经验而已,我会贴上知识源的博客。
这是我的一次作业,也就是在区块链上刻上字。实际上就是构造一个op_retun交易,然后而要写的东西的哈希放进去。
下面我将一点点说明我的失败之路,不过最终成功了。
首先要说明的是,现在很多网站像这种刻字服务都成为封装好的服务了,有些收钱,有些免费
比如:
https://originstamp.org 这个网站它是免费的,可以证明文件的存在性和发布时间
http://www.ibitlin.com/ 这个网站有很多小工具,包括生成密钥,广播交易等,也有直接的刻字服务,不过可能有些小错误,我提交了一个测试网的刻字服务,刻完后去查询,发现那个查询的网站挂了,然后跳转到另一个网站后啥也没有了,也就是说,刻完字后根本找不到那个交易,哭泣。。。
然后,我第一次尝试的是搭建bitcoin core的节点,在我电脑的centos7系统下,这是因为我开始学习的时候看的是《精通比特币》那本书,里面建议的就是自己搭节点,然后用它的命令行完成一些操作,基本上就是利用json的一些接口来生成交易呀、查询交易呀之类的。有个致命问题,那就是你必须要等待他自动同步完所有的区块,好几个G,如果你每隔一分钟用 getblockchaininfo(具体不记得了)去查他已经下载下来的区块高度,就会发现一直在增长,但是很慢,我的好像是19万的高度,但是同步完好像是40多万,要好几天,所以,我放弃了。如果你现在生成了一个交易,包含它的区块被发布了,那一定是最高的区块,那么你还没同步完,肯定就查不到。
之后我用试了以太坊,也失败了,过程略过。。。(新手太菜)
放弃了这些方法后,我看到了这么一篇博客https://blog.csdn.net/u010662978/article/details/79195284,我下面的任务基本就是按照它来完成的。
第一步是安装go语言,然后是安装git,然后就是安装btcd。btcd实在是太难装了,我装了好久都失败了,网上有很多指导,很多都不全。
1.如果想完整安装就参考https://www.cnblogs.com/hupeng1234/p/9729180.html,我做到了第(2)步的最后一步,也就是go install . ./cmd/...出错,我发誓我所有的都做了哭泣。
这篇博客里有两个错误,首先是在glide install之前要运行一次glide init,
其次是glide install的错:
(1)如果不FQ的话,那么就会要执行“go get golang.org/x 包失败解决方法”这一步,最后有这么几步:
这里只下载和安装sys和crypto是不够的,还有net也要下载和安装,不然会报错,这几个都是按顺序依赖的
(2如果可以FQ(我是有VPN的(shadowsocks)),但是还是在执行glide install时报错(迷惑),于是我命令行执行一下命令:
set http_proxy=127.0.0.1:1080
set https_proxy=127.0.0.1:1080
接着需要设置镜像
glide mirror set https://golang.org/x/crypto https://github.com/golang/crypto --vcs git
glide mirror set https://golang.org/x/net https://github.com/golang/net --vcs git
glide mirror set https://golang.org/x/sys https://github.com/golang/sys --vcs git
glide mirror set https://golang.org/x/text https://github.com/golang/text --vcs git
glide mirror set https://google.golang.org/grpc https://github.com/grpc/grpc-go --vcs git
glide mirror set https://google.golang.org/genproto https://github.com/google/go-genproto --vcs git
glide mirror set https://golang.org/x/mobile https://github.com/golang/mobile --vcs git
glide mirror set https://golang.org/x/tools https://github.com/golang/tools --vcs git
glide mirror set https://golang.org/x/image https://github.com/golang/image --vcs git
然后就可以正常glide install了
2.我并没有完整安装btcd,因为各种错误,很烦躁。如果完整安装的话,就会在go的bin目录下生成一些工具,这些工具可以用来在命令行执行一些像sendrawtranction之类的对于区块链的直接操作。如果没有完整安装,就想我一样,那么就直接下载github的btcd包放在go目录下就行了,这样就能正确进行下面的代码编译。
go src下创建文件夹,文件夹里包含以下代码:
代码作者:ioael
来源:CSDN
原文:https://blog.csdn.net/u010662978/article/details/79195284
package main
import (
"github.com/btcsuite/btcd/btcec"
"github.com/btcsuite/btcutil"
"github.com/btcsuite/btcd/chaincfg"
"fmt"
)
func GenerateBTC() (string, string, error) {
privKey, err := btcec.NewPrivateKey(btcec.S256())
if err != nil {
return "", "", err
}
privKeyWif, err := btcutil.NewWIF(privKey, &chaincfg.MainNetParams, false)
if err != nil {
return "", "", err
}
pubKeySerial := privKey.PubKey().SerializeUncompressed()
pubKeyAddress, err := btcutil.NewAddressPubKey(pubKeySerial, &chaincfg.MainNetParams)
if err != nil {
return "", "", err
}
return privKeyWif.String(), pubKeyAddress.EncodeAddress(), nil
}
func GenerateBTCTest() (string, string, error) {
privKey, err := btcec.NewPrivateKey(btcec.S256())
if err != nil {
return "", "", err
}
privKeyWif, err := btcutil.NewWIF(privKey, &chaincfg.TestNet3Params, false)
if err != nil {
return "", "", err
}
pubKeySerial := privKey.PubKey().SerializeUncompressed()
pubKeyAddress, err := btcutil.NewAddressPubKey(pubKeySerial, &chaincfg.TestNet3Params)
if err != nil {
return "", "", err
}
return privKeyWif.String(), pubKeyAddress.EncodeAddress(), nil
}
func main() {
wifKey, address, _ := GenerateBTCTest() // 测试地址
// wifKey, address, _ := GenerateBTC() // 正式地址
fmt.Println(address, wifKey)
}
然后正确生成地址A和私钥B,然后领钱、执行剩下的代码都不说了,都按那篇博客来就行了,最后生成的交易是一串16进制。
如果完整的安装了btcd,那当然用它的命令就可以广播这个交易,由于失败了,所以我就退而求其次,在https://live.blockcypher.com/btc-testnet/pushtx/上手动方式广播了交易
之前说的http://www.ibitlin.com/网站和其他一些网站,广播交易都显示各种错误。。。有些网站甚至没有testnet的广播功能,只有mainnet
然后广播完,等一会“6个确认”之后,交易被包含的区块被验证了,就可以去查了。
这里需要说的是,我在op_return里写的是一个学历证书的哈希,这个证书是带有签名的证书,也就是说,学历信息被先签名再哈希,再结合区块链的时间戳,不可否认、不可篡改、时间戳都有了。
本人小白,刚接触不久,需要交流可以加QQ:1657723943一起学习!