永恒之链:用微信在区块链上刻字项目技术详解

当前位置:首页 > 币圈百科 > 永恒之链:用微信在区块链上刻字项目技术详解

永恒之链:用微信在区块链上刻字项目技术详解

2022-12-01币圈百科318

注:这是5月20日论坛上发的一篇老文章。今天新开了一个专栏,所以我想搬到这里!感谢小牛编辑~

上周我用微信微信官方账号[lawup2003]做了一个区块链刻字服务,是我自己测试的,免费的。每一个关注这个微信官方账号的用户,都有三次机会在比特币的区块链上永久镌刻一段不超过40字节的内容。一经发布,立刻引来了业内外众多同行的围观。(服务器6月22日到期,不打算续费。它将不再提供刻字服务,但之前刻在区块链上的内容将会永久保存。这段时间所有的刻字内容都在这个地址交易的OP_RETURN里:3359 block chain . info/address/1 mg1 znbkxpcglf 2 ZF 6 w 48 nd 8 owfkoefu?我要去研究以太坊之类的新东西!事实上,你可以按照这篇文章,并作出相同的区块链刻字服务!)?申屠的青年老师,一周前才给我们上了一节课,经历了项目后的评价:“很好的想法!执行力强!”?该项目在区块链微信讨论群发布后,有群友点赞,红包源源不断。有群友说:“谢谢你的努力!让我对区块链有了直观的感受!”?蚂蚁首席执行官达洪飞也认为:“这个应用相当有趣,简化了使用区块链的门槛。”当然,他也提醒:“目前这还不适合商业项目”,因为“太简单了,没有壁垒!”?的确,作为一个商业巨子,“大叔”有着非常准确的眼光。然而这几天,当我耐心地向那群一个个询问技术细节的朋友解释时,我发现大家对区块链的知识和技术能力其实是参差不齐的。如何给区块链技术爱好者,尤其是那些刚刚入门却面对一堆密密麻麻文档的初学者一个指南,可能就是我这个小小的实验项目对中国区块链事业的贡献了。特别是另一位同学提到,他觉得用微信对接区块链,大大增强了易用性,减少了用户对陌生事物的恐惧,所以准备基于我的项目做课堂考勤等创新应用。所以,事不宜迟,我们来解剖这只小麻雀吧!新手一步一步跟着我,还可以设置一模一样的微信刻字服务。第一步:学会使用比特币脚本刻字。注意,默认看这篇文章的都是和作者一样的新手,就拿windows平台做演示截图吧。至于用linux或者Mac的,证明你已经不是初学者或者有一定的技术水平了。请自行切换(其实不影响你)。 ?1.下载安装比特币核心客户端,运行比特币-qt(带UI的客户端),同步所有区块(现在区块体积已经达到75G,所以需要足够大的硬盘);2.同步完成后,点击客户端顶部二级菜单中的【请求支付】,进入后点击【请求支付】。系统会为你创建一个比特币钱包地址,并复制你的比特币钱包地址;3.你需要去交易市场买一些比特币(因为挖矿对新手来说又是一大新问题,直接买吧。当然也不要买太多。购买0.01比特币,约合人民币30元,足够我们项目使用很长时间),然后把硬币提取到你刚才复制的地址,你的比特币钱包的地址;4.钱支付后,你会看到你在客户端上的可用余额不再是0。此时点击客户端顶部菜单中的【帮助调试窗口控制台】,打开输入脚本的地方,按照以下步骤操作:(1)键入以下内容并输入(1mg P1 ZnbKXPCGLF 2 ZF 6 w 48 nd 8 owfkoefu是我的比特币钱包地址,操作时请改为您的地址):列出未消费0 100 '[' 1mg P1 ZnbKXPCGLF 2 ZF 6 w 48 nd 8 owfkoefu ']'获取交易ID(txid),如下图:这一步是检查这个钱包中未消费的金额。金额后面是现有比特币的金额。当然这里的主要目的是获取交易ID(txid),vout后面的数字也写下来,以便完成后面的步骤;(2)找一个能把字符串转换成十六进制(STR2HEX)的在线网站,把你要写的单词编码成区块链。比如,我想把“代码即法律”这句话写进区块链。hex之后,我得到的是“436f6465206973204c6177”。掐算一下,不超过40个字符,可以继续(我们?(3)回到比特币客户端的[控制台],键入以下内容并输入:CreateRawTransaction '[{ ' TXID ':' 70 c 66 f 61 ab 38482 f 4193 ea 78 ce e68 a 54685382 b 04 a 46 D2 ee 68 f 6467 ca 392 B1 FB ',Vout ':0 }]' ' { " 1 lupuz 5 bttczja 1 bgx 5 db 6 V8 vnjptz ":0.001," 1mg P1 znbkxpcgc?vout指的是你的比特币客户端上你钱包里的地址的号码。在这里,我是0,这意味着它是最新的地址。如果你按照我前面说的做了,没有创建更多的地址,也应该是0;后面第一段地址和金额表示交易中收到钱的地址和金额。因为我们的目的是刻字,所以我只转了很少的金额(0.0001比特币,已经是“尘量”了,再少的话可能就得不到比特币网的确认了)到我的另一个比特币钱包地址(理论上可以填写和发送钱包相同的钱包地址,但是在客户端,可能是为了避免明显的“错误”,所以不允许输入这样的脚本命令。但是我们后面用RPC实现的时候,我直接从调用同一个账号就可以了;如果没有第二个比特币钱包,可以通过前面的方法产生另一个接收地址,在脚本中设置那个地址为接收地址。但是需要注意的是,你的发送地址的vout会变成1,因为那个新生成的地址会是最新的,它的vout会是0);后面第二段地址和金额是变更地址和金额(关于变更地址和比特币交易的操作机制请自行了解,此处不谈)。如果不指定变更地址和金额,系统会自动在您的钱包中生成一个新的地址进行变更,金额为扣除默认手续费后的金额(默认手续费可以在客户端的【发送】界面左下角看到)。 比特币之所以需要生成新的地址进行变更,主要是为了保护转让方的隐私,但也给新手带来了不便。在系统中,每次发送未指定变更地址的交易时,系统将使用一个变更地址。每使用100个地址后,会被集体丢弃,然后同一批产生100个新地址。如果您使用以前的地址之一作为接收地址,您将在新的100个地址生成后收到它们。所以为了避免麻烦,我建议最好把这里的零钱地址设置成自己的钱包地址。当然,这又会面临一个新的问题。变更地址后面的金额怎么填?公式是:未消费的金额-自身转出的金额-交易手续费,所以这里是:0.013988070.00010.0001=0.01378807;在数据项中,将之前得到的字符串填入HEX后,该字符串将被刻入区块链;得到了一个很长的字符串,复制下来下一个使用;(4)键入以下内容并输入:signrawtransaction,后跟上一步中获得的长字符串。这里我们对之前创建的交易进行了签名(用你唯一的比特币钱包的私钥签名),得到的十六进制就是签名后的结果。完整的true值表示签名成功!复制十六进制,以后用;(5)键入以下内容,并在sendrawtransaction后输入:hex和该长串签名。在这里,事务被发送和广播,结果是这个事务的ID。复制此交易记录ID;5.交易的广播执行是即时完成的,可能需要10-30分钟才能确认同步(RP问题,哈哈),但这并不影响一些提供区块链信息查询的网站查看这笔交易。比如我们打开:3359blockchain.info/tx/8d2933db168a AEAD 7e 654 B4 d 76805 C2 de 933584242 f 6 c 6 D5 BD 1589 e 7d 0517 AE 4后面部分的URL就是我们之前得到的交易ID。把它移到页面最下面,OP_RETURN项就是我们刻的外卖数据(有些查询网站默认不显示脚本,要点击【显示脚本】或者【显示脚本】才能看到):截图如下:第二步:学习配合比特币RPC,用比特币-cli操作?1.配置比特币PRC?(1)关闭比特币-qt(关闭时要小心,关闭后多等几秒钟,以免出现不可预知的错误,导致最终同步的区块链损坏,需要重新同步);(2)进入C:\ Users \ username \ AppData \ Roaming \ Bitcoin文件夹(这是你的bitcion安装后默认的配置文件文件夹,是在安装比特币程序或第一次运行比特币程序后自动生成的),新建一个文件bitcoin.conf,在里面添加以下内容(括号和括号内的说明,不要写入文件):rpcuser=123456(请把123456改成你的RPC用户名)rpcpassword=123456?(RPC端口,默认是8332,但是我可能在windows下安装了其他软件,所以8332端口不能用,所以改成了8338。)RPC CallOWIP=127.0.0.1(出于安全考虑,RPC只允许本地连接)rpcconnect=127.0.0.1(出于安全考虑,只连接本地节点)注意以上。(3)打开【命令提示符】,进入终端中比特币安装目录下的deamon文件夹。比如我的是【C:\Bitcoin\daemon】,输入bitcoind -server,输入。因为我们没有指定其他参数,如果没有报错,那就是比特币在运行!让这个【命令提示符】窗口一直开着,不要关闭,因为一旦关闭,bitcoind就会关闭。 ?(4)打开另一个[命令提示符]。同样,在终端中,首先进入比特币安装目录下的deamon文件夹。比如我输入CD c:\比特币\daemon?输入:比特币-CLI-rpcuser=123456-rpcuser密码=123456 getinfo。当你输入后,结果如下:蓑衣网小编2022这里是账户的概况;测试比特币-cli是正常的,所以和之前在比特币-qt的【控制台】中的操作是一样的。唯一的区别是两点:第一,前面要加比特币-CLI;第二,要注意引号的转义。JSON中的所有引号都应该用反斜杠转义。好的,那么我们来试试createrawtransaction语句,键入以下内容,然后回车:bitcoin-clicreaterawtransaction " { \ ' txid \ ':\ 8d 2933 db 168 a AEAD 7e 654 B4 d 76805 C2 d 93584242 f 6 c 6 D5 BD 1589 e 7d 0517 AE 4 \ ',\ ' Vout \ ':0 }]" " { \ " 蓑衣网小编2022 1 lupuz 5 bttczja 1 bgx 5 db 6 mo 6 V8 vnjptz \ ":0.00只需在另一个地方输入命令,执行结果也是一样的。按照前面的步骤就行了!第三步:用php或者python或者其他语言调用RPC操作?在维基上(https://en.bitcoin.it/wiki/API _ Reference _(JSON-RPC))发现有很多语言可以调用比特币的PRC,从而使得在你现有的程序中完成在比特币区块链上刻字的操作成为可能。当然,我们不必多此一举,因为有太多细节需要注意。前面的基本原理我们已经知道了,现在要追求实用主义(不知道基本原理,后面的一些需要个性化的东西就不知道怎么改了,所以基本原理也是必须的)。如果你懂php或者python,可以站在前辈的肩膀上用刻字。1.去github找php-OP_RETURN(这个属于php。如果使用python,还可以找到python-OP_RETURN。作者都是coinspark,用法也差不多)。将php-OP_RETURN部署到你的php运行目录下(在windows上,一键phpstudy即可搭建php环境);2.修改OP_RETURN.php文件,配置rpc信息:?3.在同一个目录下创建一个php文件(比如run.php),把下面的代码放进去(也是根据自述):然后在浏览器里运行这个文件?http://127.0.0.1/run.php?获取交易的ID(流程和以前一样复杂,完成起来那么简单,不知道原理的会觉得很简单,哈哈)。就像之前一样,拿着交易ID去blockchain.info等网站查一下,你会在最下面的OP_RETURN看到你刻了什么。注意,这里我可以用同一个钱包地址发给自己,而且成功了,说明比特币只有一个限制——Qt,在底层其实是可以自我转账的。4.如前所述,交易发送100次后会自动替换一批新地址。然后,如果使用原来的php-OP_RETURN代码,将自动生成更改地址。到了100次,自己转来的钱就收不到了(因为旧地址属于已经丢弃的100个地址,新收到的钱由于缺少这个地址对应的密钥就不再用了,虽然数量少。不烧钱我是不会做的),所以,我们要把php-OP_RETURN原代码中生成新地址的那段注释掉,然后把creatrawtransaction中的更改地址改成自己(更改自己,不管是否发送100笔以上的交易,“网上钱包”服务总能使用一个地址的原因是一样的,原理是一样的)。打开OP_RETURN.php文件,修改这两个地方:当然,你也可以有其他的想法,比如先通过rpc计算新地址,然后把减去交易费的金额发送到新地址,这样就可以实现零变化。这也是一种思路,但可能会遇到问题:当上一笔刻字交易尚未确认时,紧随其后的下一笔交易可能会被视为“双花” 当然,这个想法还可以进一步完善。写这一段的目的就是为了表达。如果你觉得我的方法不好,也可以打开思路,构建一个更好的流程,让系统自动运行,少一些人工输入。5.现在运行http://127.0.0.1/run.php就可以实现自翻自寻事务了,在blockc中。hain.info上面显示是这样的:?6、当然,最关键的,补充一下,OP_RETURN就通过php程序(或者python或其他程序)刻到bitcoin的区块链上去了,这也就实现了通过网站web刻字了。第四步:把功能与微信开发者模式对接?我们这里主要讲bitcoin和blockchain,所以如果要想深入了解微信公众号的开发者模式的各种功能,可以搜【方倍工作室】,那里有关于微信开发者模式的任何东西。?注册并登录微信公众号的后台,在【自动回复】中关闭编辑模式,然后去【基本配置】中开启开发者模式,根据【开发者工具→开发者文档】的规范在你的服务器上建立一个php网络文件,将该网址放到【服务器配置】中:通过这个网络文件,实现接收微信用户发来的消息,判断其类型,获得其内容,然后根据类型和内容,自动给予回复。这也就是微信用户发来消息,然后微信公众号把刻好字的交易地址回复给用户的基本流程啦!?这里还要说个特殊考虑,笔者的bitcoin是部署运行在阿里云上,且rpc配置只允许127.0.0.1本机调用,所以笔者在阿里云的这台机器上搭建了php环境,然后用一个特殊的端口接收和反馈结果;而运行微信开发者模式的php程序实际是在SAE新浪云上,只有在SAE上面的php程序知道调用bitcoin的rpc的主机和端口,同时两者之间通讯还需要一个简单的认证,说白了,就是中间多加了一层,这么做,目的有两个:一个是确保bitcoin网络运行与微信公众号的网络运行互不影响,例如bitcoin占资源较多时,不至于出现微信公众号用户发了内容半天没有回复的情况;当然,其实第二个原因才是重点,那就是,除了SAE这个程序里面,谁也不知道我的bitcoin运行的主机是地址,这便能较好地保护我的比特币的安全(虽然没多少,但也是钱呀)!因为我听说偷比特币的黑客很厉害的,咱是初学者,除了冷钱包备份,还没掌握比特币热钱包的安全技巧呢!所以只有尽量让自己藏起来,不露脸就不会挨打,这个好像是《三体》里的“黑暗森林法则”吧,哈哈~?那么,来实际感受一下这个微信小作品吧,扫描二维码关注【lawup2003】(6月22日之前有效):话说,我在文章开头说了,跟着我一步步来,你也可以做出一个一模一样的微信,所以我将毫无保留提供我能提供的一切(即便我其实是个文科生,代码写的很糟糕,数据库的设定也不是很科学,但也不怕献丑了):我把微信开发者模式绑定的网络文件及mysql数据库文件打包访到百度云上面了,需要的朋友请自己下载。需要注意的是,微信配置文件和与阿里云主机通讯的地方,无论怎么样要大家自己根据需要改了(我在每个需要改的行后面都备注了“//修改”,你可以通过搜索快速找到),因为我相信对于看懂了这篇文章的同学来说,这几个地方补充上,一点也不难。?就这样啦!微信开发者模式php文件和数据库文件的下载地址是:http://pan.baidu.com/s/1mhWlDsG?最后,如果大家觉得项目不错,或者有任何想法、疑问和吐槽,可以加笔者微信Lawup2 谢谢~
永恒之链:用微信在区块链上刻字项目技术详解 | 分享给朋友: