赶在2021过去之前,记录下今年一个有趣的尝试。

在今年6,7月份开始听闻NFT,一种数字货币与艺术品结合的个性化token,当时看不明白,也没引起足够的重视,但随着市场的发展,特别是opensea交易的繁荣,越发觉得这个东西很有趣。到10月份时候在老朋友鼓动下,尝试了自己编写一个NFT项目DEMO。制作过程涉及的区块链编程的知识比较多,时间有限,这不是一份教程,只是记录一些关于制作这个DEMO期间零碎的要点,记录一份自娱自乐和回忆

DEMO建立在Rinkeby Net上,是以太坊的测试链,选取的是一套圣斗士题材的NFT(因为小时候就有收集圣斗士的爱好,这里作品资源仅作为测试使用,另外以太的主网很贵,就选择发布在测试链了),先上个做好的WEB:DEMO地址

NFT项目实际上是一份基于以太坊的智能合约,这种合约标准是ERC 721, 以前基于主链发币的合约标准是 ERC 20,后者是同质化的,前者是非同质化的货币,也就是NFT的字面意思,它在货币的基础上,增加了一个metaData属性,将艺术作品与数字货币结合。

关于这两个标准,相关文档可以看:ERC 721 文档  和 ERC 20 文档

openzepplin是一个合约的标准库,里面集成了大量的标准合约,:openzepplin的github仓库

制作这个DEMO的过程,大致可以分为三个阶段: 编写合约发布合约制作网站进行合约交互:

由于这些年都在使用Python,所以选择了一个python的框架 eth-brownie,brownie框架可以编写,编译和部署合约:

关于eth-brownie的安装和调试文档:brownie文档

具体使用可以参考这个项目说明,项目地址, 直接使用是不行的,由于编译器,语言,合约规范等迭代的变迁,但可以作为熟悉下brownie的一些操作;

注意:这里python程序与以太坊交互是需要一个访问以太网的网关的,可以再https://infura.io/注册一个,小量使用是免费的。(后面从web上与合约交互,借助metaMask即可)

框架调试好后,就可以开始编写合约了,这里涉及到了合约语言,我选择了solidity,

中文文档:文档地址

合约的编写过程,我参考了几份当时热门项目的合约,Doodle,mekaVerse这些,并把编译器升级到了当时最新的0.8.9版本;

 Doodle项目合约:合约地址

 MekaVerse项目合约:合约地址

这些好的项目代码给我很多启发:如何管理一个项目,开关的设定,资源地址的设置,费用的收取与分成方式,铸造的规则限制等等,值得细读; 

编写的过程中遇到了许多问题,主要是由于solidity语言在不断的迭代中,编译器版本,合约版本,语言的变化,兼容导致的,记录几个印象比较深刻的:

1:相比0.6版本的编译器,0.8版本以后没有了_setTokenURI方法,这是一个将token与艺术品资源绑定的重要步骤:

可参见:这篇文章 和 这篇文章

理清楚:tokenURI(), setBaseURI(), _baseURI()的关系后,重新实现了0.6版本中的'_setTokenURI()';

如果有重写tokenURI的需求,可以参考ERC721URIStorage.sol里的几个函数方法;

2:安装编译器的方法:

比如当你需要一个低版本或高版本的编译器:

>>> from brownie.project.compiler import install_solc
>>> install_solc("0.5.10")

3:合约编写的代码质量,直接关系到此后发布,mint,管理项目时的gas成本;(以太坊是一台巨大的状态机,任何改变状态机状态的动作,都要收取燃料费

 编写好后,就可以借助brownie命令把合约编译和发布了,查询发布到rinkeby测试网的合约,可以这个网址:地址

最后一步就是设计web与合约进行交互,web的制作与传统web一样,主要就是交互部分,这里用到了web3.js

js与合约的交互,和python brownie与合约的交互是类似的,函数接口,语言写法略有不同,参考文档即可:

web3.js中文文档:文档地址

web与合约的交互,你需要使用到metaMask钱包,去官网下载安装即可:安装地址

交互前记得连接合约地址,配置好合约的ABI接口(js就可以使用合约函数了); 

关于python的全局代理设置方法,这只是连接方法,剩下要科学处理:(包括本文提及到的许多页面的访问都需要进行科学处理)

socks.set_default_proxy(socks.SOCKS5, '127.0.0.1', 10808)
socket.socket = socks.socksockets

获取测试网的ETH代币:(如果是真的就好了)

免费领取地址  (备注:不常能成功,有时要多试几天)

最后,放上项目的demo地址(仅供学习娱乐):DEMO地址

mint之后就可以在testnets.opensea.io 上浏览到你mint的nft了,以下截图这是我的钱包里的 ?(^_-):

觉得有趣的可以获取测试币尝试一下mint(记得把MetaMask钱包切换到rinkeby网络),看看能不能收藏到自己喜欢的 ^_^

标签智能推荐:

区块链

关键词:SHA256非对称加密区块链和比特币的关系:区块链是比特币的底层技术区块链概念:技术角度:分布式数据库技术应用角度:区块链本质上是解决信任问题、降低信任成本的技术方案,目的就是为了去中心化,去信用中介问题:在开始阶段分布式数据库节点少的情况下,区块链是如何发张起来的?

区快链参考

1、开源 FingerNFT系统2、 3、 4、用springboot2从零开始创建区块链

h5区块链项目实战

近来区块链一词很热门,网络上关乎其讨论也很多,这里就不解释了,毕竟几句话也是说不清楚的。最近得空利用HTML5+css3+jQ开发了一个移动端的区块链项目,感觉界面、布局、效果还是ok的。项目效果截图:对于区块链,这里有详细解释: https://www.zhihu.com/question/37290469

区块链会2020再次爆发,先学点DAPP压压惊,跟我一起学《区块链DApp入门实战》

区块链DApp正在经历市场洗礼,常言道,对抗动荡最稳妥的是稳扎稳打的技术学习,不能临时抱佛脚。马化腾说:互联网会像水和电一样融入我们的生活。而区块链呢?它是价值互联网的基石,是未来必然的趋势,也会像水和电一样!1、为什么要学习DAPP?快速进入区块链应用技术开发,为迎接DAPP时代做好入场准备,创造有价值的应用。2、本书的价值?从底层代码到上层应用场景和业务介绍,全面阐述智能合约的价值。3、带着问

整理分析: 国内外主流区块链服务平台

成:1.两种区块链服务的对比分析2.国内外区块链服务概况3.区块链BaaS平台应用技术分析两种区块链服务的对比分析我把区块链服务归纳为两种类型:区块链应用服务(BaaS)、区块链技术服务(BTaaS)。区块链应用服务(BaaS)的概念"BlockchainasaService",区块链即服务。一般我们指利用区块链上产生的数据,提供基于区块链的区块/交易查询、数据信息提交等一系列操作服务。区块链服务

你要的区块链书单来了!

天带你读好书!​区块链系列书单​图说区块链内容简介区块链,如瑞士仪表般精密,如互联网般惊世骇俗,它在以神一般的节奏颠覆社会。当新兴技术来临时,你可以选择规避——如果明天也可以规避的话。区块链也一样。作为一个现象级概念,金融科技创新在过去几年迎来了奇点式发展。其中引人注目的当属区块链技术。区块链技术正在动摇全球金融基础设施,它是全球*级银行和其他金融机构重点追逐的领域。毫无疑问,区块链是未来5年有前

第三章 典型应用场景

区块链在不引入第三方中介机构的前提下,可以提供去中心化、不可篡改、安全可靠等特性保证。因此,所有直接或间接依赖于第三方担保机构的活动,均可能从区块链技术中获益。区块链自身维护着一个按时间顺序持续增长、不可篡改的数据记录,当现实或数字世界中的资产可以生成数字摘要时,区块链便成为确权类应用的完美载体,提供包含所属权和时间戳的数字证据。

区块链系列教程

想了解相关区块链开发,技术提问,请加QQ群:538327407(已满),群2:135019400本人行业部分演讲1、百家争鸣:区块链大规模商用,三年内能否实现?(CCF论坛:厦门哈希科技CTO林滨) 2、中国芯谷南安分园区区块链知识讲座(主讲)3、FISCOBCOS官方社区邀请技术选型分享一、hyperledgerfabric1、在ubuntu下搭建区块链(HyperledgerFabr

【转载】区块链应用加速到来 “群雄逐鹿赛”看点在哪?

bsp;9月26日,2019杭州云栖大会的第二天,蚂蚁金服副总裁蒋国飞在区块链分论坛上指出,区块链将构建信任机制的基础设施,未来,上链量将成衡量数字经济水平的重要指标。于此同时,他还预测一年内,将出现一批千万日活的区块链应用。同时,我国工业和信息化部信息中心也曾发布相关研究报告—《2018中国区块链产业白皮书》。该报告表明,目前我国目前已经具备较好的区块链产业发展基础,我国拥有广泛的区块链技术应用

区块链或NFT的资源汇总

NFT的技术实现原理:https://www.cnblogs.com/linguanh/p/15163809.html2、如何用技术实现它。https://coinvoice.cn/articles/182123、区块链技术架构。https://www.jianshu.com/p/21753116907e4、区块链基础架构。https://www.sohu.com/a/240771932_1001