智能合约-名字登录模式
工厂合约的地址如果经常变化,就必须追踪这些合约。在这种情况下,就可以使用名字登录模式,存储合约名到合约地址的映射mapping,同时提供根据合约名来查找合约地址的功能,甚至还可以追踪版本。
1 | pragma solidity ^0.6.12; |
通过 getContractDetails(name) 获得合约地址和指定版本的合约。
关联文档:
工厂合约的地址如果经常变化,就必须追踪这些合约。在这种情况下,就可以使用名字登录模式,存储合约名到合约地址的映射mapping,同时提供根据合约名来查找合约地址的功能,甚至还可以追踪版本。
1 | pragma solidity ^0.6.12; |
通过 getContractDetails(name) 获得合约地址和指定版本的合约。
关联文档:
1 | pragma solidity ^0.6.12; |
owner 必须可接受支付的回收的gas。
关联文档:
ERC721是比ERC20更复杂的标准,具有多个可选扩展名,并且分为多个合约。 OpenZeppelin合约提供了灵活的组合方式以及自定义有用的扩展。本文讲解以OpenZeppelin合约为目标对象。
我们将使用ERC721来跟踪游戏中的装备条目,每个条目都有各自独特的属性。 每当要奖励给玩家时,便会铸造(mint)并发送给他们。 玩家可以自由保留自己的代币,也可以与自己认为合适的其他人进行交易,就像区块链上的任何其他资产一样! 请注意,任何帐户都可以将awardItem称为铸造(mint)。 为了限制可以创建项目的帐户,我们可以添加访问控制。
合约如下所示:
1 | // contracts/GameItem.sol |
ERC721合约包括了标准扩展(IERC721Metadata和IERC721Enumerable)。 这就是_setTokenURI方法的来源:我们使用它来存储项目的元数据。
另请注意:与ERC20不同,ERC721缺少小数,因为每个令牌都是不同的,并且无法分区。
新项目示例:
1 | > gameItem.awardItem(playerAddress, "https://game.example/item-id-8u5h2m.json") |
查询每个项目的所有者和元数据:
1 | > gameItem.ownerOf(7) |
此tokenURI应该解析为一个类似于以下内容的JSON文档:
1 | { |
有关tokenURI元数据JSON架构的更多信息,请参考==>https://eips.ethereum.org/EIPS/eip-721
ERC721可用的预设有ERC721PresetMinterPauserAutoId。它已预设为允许Token铸造(创建),停止所有令牌传输(暂停),并允许持有人焚毁(销毁)其Token。合同使用访问控制来控制对铸造和暂停功能的访问。部署合同的帐户将被授予minter 和pauser 角色,以及默认的admin角色。
无需编写任何Solidity代码即可立即部署此合同。它可以原样用于快速原型制作和测试,但也适用于生产环境。
关联内容 ==> https://willzhuang.github.io/2019/07/04/ERC20-721Token的发行-冻结-多方签名功能
《数字货币与数字金融》读书心得III。
一是不可篡改,更加安全。传统技术通过宣布财产所有权,并以法律做背书,比如房产。区块链技术通过分享记录交易的数据库,辅以密码学和共识算法,实现了数据库历史记录的不可篡改。实践证明,这样一个数据库可以确保市值达到百亿美元的比特币在全球黑客的攻击下,运转稳定。
二是异构多活,可用性强。从区块链的系统机构看,每个系统参与方都是一个异地多活节点,远远超过两地三中心这样的冗余度,是天生的多活系统。如果某个节点遇到网络问题、硬件故障、软件错误或者黑客控制,均不会影响系统以及其他参与节点。问题节点在排除故障后并完成数据同步后,便可以随时再加入到系统中继续工作。此外区块链中的节点通过点对点的通信协议进行交互,在保证通信协议一致的情况下不同节点可由不同开发语言、基于不同的架构、实现不同版本的全节点来处理交易。由此构成的软件异构环境确保了即便某个版本的软件出现问题,区块链的整体网络不会受到影响,这也是其高可用的基石所在。
三是新型协作机制,效率更高。对于公司之间的大规模多变协作,在区块链应用之前,通常只有两种解决方法。其一,在多个主题之间向上寻找共同的“上级”机构,实现对整个组织进行协调。它局限于某些场景很难找到一个所有市场参与方共同认可的信任中心,并且对于中心而言,由于优先级的存在,不一定能够及时、有效地满足所有协作需求。其二,参与方让渡部分权利,共同组建第三方机构完成协作。它局限于若制度不能满足第三方机构的盈利和管理需要,其往往能够成为各参与方的实际权利中心。区块链提供了另一种方法:以对等的方式把参与方连接起来,实现更有弹性的协作方式。因为参与方职责明确,不用向第三方机构让渡权力,无须维护第三方信任机构的成本,有利于各方更好地开展协作。作为信任机器,区块链有望成为低成本、高效率的一种全新的协作模式,形成更大范围、更低成本的新协同机制。
四是智能合约更加先进。智能合约具有透明可信、自动执行、强制履约的优点。首先,对于用户来讲,只要能够接入到区块链中,用户就可以看到编译后的智能合约,可以对代码进行检查和审计。其次,可信还来源于智能合约的运行环境,一个程序的运行结果除了与程序代码有关,还和技工给程序处理的数据有关。因此,智能合约一旦被部署到区块链上,程序的代码和数据就是公开透明的,无法被篡改,并且一定会按照预先定义的逻辑去执行,产生预期中的结果。如果基于代码的智能合约能够被法律体系所认可,那么依托程序的自动化优势,通过组合串联不同的智能合约,达到不同的目的,能够是我们加速走向更为高效的商业社会。
一是性能问题有待突破。区块链的性能问题主要体现为吞吐量和存储带宽的矛盾。
二是隐私保护有待加强。身份隐私与交易信息隐私。
三是区块链升级修复机制有待探索。在具体实践中,公有链社区摸索出“硬分叉”与“软分叉”等升级机制,但遗留问题还有待观察。对于常规代码升级,通过分离代码与数据,结合多层智能合约结构,实现可控的智能合约更替。
四是跨链技术成为难题。目前三种跨链技术:公证人机制、中继链、哈希锁定技术。
1.从系统架构看,与目前的互联网相比较,区块链使得C端客户的自主掌控能力及其在系统中的话语权得到极大的增强,信息网络由中心化架构进入以C端为主的平权时代。
2.从会计学角度看,区块链是一种全新的分布式账本技术,采用了全新的记账方法:每个人都可以参加,只要按照要求,达到选举规则的设定目标,就可以获得记账权,成为新区块的记账人,所有参与者共有、共享账本信息,都能检测、验证账本信息。与传统账本技术相比较,DLT账本技术的优势在于:不易伪造,难以篡改,效率高,且可追溯,容易审计;通过交易签名、共识算法和跨链技术保障分布式账本的一致性,自动实时完成账证相符、账账相符、账实相符;从技术可行性看,瞬时的资产负债表编制或将成为可能。
3.从账户角度看,区块链私钥本地生成,非常隐秘,从中导出公钥,再变换出钱包地址,自己给自己开户,不需要中介,这在金融史上市一个非常重大的变化:一是用户可通过数字身份运用安全技术对金融资产进行自主控制;二是用户之间点对点进行金融资产交易,可以独立于任何第三方服务机构;三是用户对数字身份的保管,直接承担交易责任,自金融模式由此应运而生。
4.从资产交易角度看,它是一种全新的价值交换技术,既可采用UTXO模式,完成“为花费交易输出”的转移,也可以采用传统的Account模式。UTXO模式和Account模式可相互转化,通过聚合归纳(Reduce),UTXO可转化为账户余额,而对账户余额进行拆分则可得到UTXO的结果。基于这一价值交换技术,我们可以创造一种全新的金融市场模式:去中心化资产交易。
5.从组织行为学角度看,区块链是一种新型的去组织化的分布式协同生产活动,它通过激励相容的算法规则和契约安排,明确了各方的经济利益,充分调动了各方的积极性,使有效的分布式协同生产成为可能,出现了新型的组织形态—自治去中心化组织(DAO):没有董事会,没有公司章程,没有森严的上下级制度,没有中心化的管理者……去中心化、去权威、点对点平权等,完全颠覆了人们通常脑海里的企业形象。这是经济活动组织形式的变革。
6.从经济学角度看,它开创了一种新型的算法经济模式。以去中心化、开放为特征,强调和尊重市场交易的自愿原则,发挥市场价格的统筹协调机制,在经济自由度上,兼具计划和市场两种机制的优点,是一种更加接近自由市场的经济模型。