1.本技术涉及区块链技术领域,具体涉及一种代币处理方法、代币合约部署方法、装置、电子设备及计算机可读存储介质。
背景技术:2.非同质化代币(non-fungible token,简称nft,代币也称通证、令牌)是一种基于区块链技术的数字资产权利凭证,可以通俗地将其理解为登记在区块链上的数字资产证书,开发者可以在以太坊平台上,根据代币标准/协议/合约发行nft。当数字资产被铸造成nft后,它将被永久储存在区块链上,独一无二,且不可更改。
3.现有很多nft合约中,如erc721合约、erc1155合约,均采用uint256数字(1~2
256
以内的数字)来标示代币编号,用户对nft进行铸造、转让、授权、销毁等操作,都必须通过代币编号进行处理。然而,代币编号不易记忆,易混淆,使得用户操作不便捷,不利于nft的交易流转。
技术实现要素:4.本技术提供了一种代币处理方法、代币合约部署方法、装置、电子设备及计算机可读存储介质,能够使用户对nft的操作更便捷,提高nft的交易流转效率。具体方式如下。
5.第一方面,本技术提供了一种代币处理方法,应用于区块链网络中的区块链节点,所述方法包括:
6.响应于携带有持有者区块链地址和用户自定义的第一代币名称的对非同质化代币的铸造触发操作,在所述第一代币名称未被使用的情况下,生成第一代币编号;
7.铸造得到具有所述第一代币编号的非同质化代币,并在铸造过程中,将所述第一代币编号从0地址转让至所述持有者区块链地址;
8.将所述第一代币名称和所述第一代币编号的映射关系,保存至预设的映射关系表中,所述映射关系表用于存储代币名称和与所述代币名称对应的代币编号的映射关系;
9.将所述第一代币名称从0地址转让至所述持有者区块链地址;
10.响应于至少携带有第二代币名称的对非同质化代币的处理触发操作,根据所述第二代币名称和所述映射关系表,执行对所述非同质化代币的处理操作。
11.第二方面,本技术实施例还提供了一种代币合约部署方法,应用于部署设备,所述方法用于部署用于实现如第一方面所述的方法的代币合约,所述方法包括:
12.响应于对非同质化代币所属的代币合约的修改操作,在所述代币合约中,创建映射关系表,所述映射关系表用于存储代币名称和与所述代币名称对应的代币编号的映射关系;
13.根据所述代币合约中所需参数包括代币编号的各第一事件和各第一函数,在所述代币合约中对应增加所需参数包括代币名称的功能相同的各第二事件和各第二函数,以获得更新后的代币合约;
14.在与区块链网络通信连接的情况下,将所述更新后的代币合约部署在所述区块链网络中;
15.其中,所述第二函数中包括查表语句和调用语句,所述查表语句用于根据所述映射关系表,查找代币名称对应的代币编号,所述调用语句用于根据查找得到的代币编号,调用与所述第二函数功能相同的所述第一函数。
16.第三方面,本技术实施例还提供了一种代币处理装置,所述装置包括:
17.生成模块,用于响应于携带有持有者区块链地址和用户自定义的第一代币名称的对非同质化代币的铸造触发操作,在所述第一代币名称未被使用的情况下,生成第一代币编号;
18.铸造模块,用于铸造得到具有所述第一代币编号的非同质化代币,并在铸造过程中,将所述第一代币编号从0地址转让至所述持有者区块链地址;
19.保存模块,用于将所述第一代币名称和所述第一代币编号的映射关系,保存至预设的映射关系表中,所述映射关系表用于存储代币名称和与所述代币名称对应的代币编号的映射关系;
20.转让模块,用于将所述第一代币名称从0地址转让至所述持有者区块链地址;
21.处理模块,用于响应于至少携带有第二代币名称的对非同质化代币的处理触发操作,根据所述第二代币名称和所述映射关系表,执行对所述非同质化代币的处理操作。
22.第四方面,本技术实施例还提供了一种代币合约部署装置,所述装置包括:
23.创建模块,用于响应于对非同质化代币所属的代币合约的修改操作,在所述代币合约中,创建映射关系表,所述映射关系表用于存储代币名称和与所述代币名称对应的代币编号的映射关系;
24.增加模块,用于根据所述代币合约中所需参数包括代币编号的各第一事件和各第一函数,在所述代币合约中对应增加所需参数包括代币名称的功能相同的各第二事件和各第二函数,以获得更新后的代币合约;
25.部署模块,用于在与区块链网络通信连接的情况下,将所述更新后的代币合约部署在所述区块链网络中;
26.其中,所述第二函数中包括查表语句和调用语句,所述查表语句用于根据所述映射关系表,查找代币名称对应的代币编号,所述调用语句用于根据查找得到的代币编号,调用与所述第二函数功能相同的所述第一函数。
27.第五方面,本技术实施例还提供了一种电子设备,包括:
28.处理器;以及
29.存储器,用于存储数据处理程序,该电子设备通电并通过所述处理器运行该程序后,执行如第一方面所述的方法。
30.第六方面,本技术实施例还提供了一种电子设备,包括:
31.处理器;以及
32.存储器,用于存储数据处理程序,该电子设备通电并通过所述处理器运行该程序后,执行如第二方面所述的方法。
33.第七方面,本技术实施例还提供了一种计算机可读存储介质,存储有数据处理程序,该程序被处理器运行,执行如第一方面所述的方法。
34.第八方面,本技术实施例还提供了一种计算机可读存储介质,存储有数据处理程序,该程序被处理器运行,执行如第二方面所述的方法。
35.与现有技术相比,本技术具有以下优点:
36.在本技术实施例中,区块链用户可以在铸造nft时,对nft自定义代币名称,并在区块链节点进行铸造触发操作,该铸造触发操作携带有持有者区块链地址和用户自定义的第一代币名称。区块链节点响应于该铸造触发操作,在第一代币名称未被使用的情况下,可以生成第一代币编号,进而铸造得到具有第一代币编号的nft,铸造过程中,将第一代币编号从0地址转让至持有者区块链地址。之后,区块链节点将第一代币名称和第一代币编号的映射关系,保存至映射关系表中。然后,将第一代币名称也从0地址转让至持有者区块链地址,至此完成铸造。铸造完成后,当区块链用户需要对nft进行转让、授权、销毁等处理时,可以在区块链节点进行相应的处理触发操作,该处理触发操作至少携带有用户提供的第二代币名称,区块链节点可以根据第二代币名称和映射关系表,执行对nft的处理操作。
37.由于nft铸造时,支持区块链用户对nft自定义代币名称,并与nft的代币编号进行了绑定,形成了代币名称和代币编号的映射关系,从而在nft的整个生命周期中,可以支持区块链用户通过代币名称对nft进行各种处理,使得区块链用户无需记忆纯数字形式的代币编号,通过自定义的代币名称即可对nft进行各种处理,提高了用户对nft操作的便捷性,进而能够提高nft的生成流转效率。
附图说明
38.图1是现有技术中的一种基于区块链网络的代币合约使用流程图;
39.图2是本技术实施例提供的一种代币处理方法的流程图;
40.图3是本技术实施例提供的另一种代币处理方法的流程图;
41.图4是本技术实施例提供的一种代币合约部署方法的流程图;
42.图5是本技术实施例提供的另一种代币合约部署方法的流程图;
43.图6是本技术实施例提供的一种基于区块链网络的代币合约使用流程图;
44.图7是本技术实施例提供的一种代币处理装置的框图;
45.图8是本技术实施例提供的一种代币合约部署装置的框图;
46.图9是本技术实施例提供的一种用于实现代币处理的电子设备的逻辑结构示意图;
47.图10是本技术实施例提供的一种用于实现代币合约部署的电子设备的逻辑结构示意图。
具体实施方式
48.在下面的描述中阐述了很多具体细节以便于充分理解本技术。但是本技术能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本技术内涵的情况下做类似推广,因此本技术不受下面公开的具体实施的限制。
49.在详细说明本技术的具体实施方式之前,首先对相关技术进行进一步介绍。
50.区块链是一种利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、以及利用由自动化脚
本代码组成的智能合约,集体维护可靠数据库的解决方案,因此,区块链具有开放、去中心化、信息共享、防篡改和可追溯等基本特性。区块链可以用区块来取代对中心服务器的依赖。
51.如图1所示,区块链网络可以包括多个区块链节点,区块链节点两两之间通过p2p(peerto peer,对等网络)实现通信。区块链节点既可以是客户端,也可以是服务端,即,区块链节点既可以向其他区块链节点请求服务,也可以为其他区块链节点或是外部应用提供服务。
52.区块链一般被划分为三种类型:公有链(public blockchain),私有链(privateblockchain)和联盟链(consortium blockchain)。此外,还可以有上述多种类型的结合,比如私有链+联盟链、联盟链+公有链等。
53.其中,去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者(也可称为区块链中的节点)可以读取链上的数据记录、参与交易、以及竞争新区块的记账权等,而且,各节点可自由加入或者退出区块链网络,并进行相关操作。
54.基于区块链的基本特性,区块链通常是由若干个区块构成。在这些区块中分别记录有与该区块的创建时刻对应的时间戳,所有的区块严格按照区块中记录的时间戳,构成一条在时间上有序的数据链条。
55.在区块链领域,有一个重要的概念就是账户(account),以以太坊为例,以太坊通常将账户划分为外部账户和合约账户两类,外部账户就是由用户直接控制的账户,也称之为用户账户,而合约账户则是由用户通过外部账户创建的,包含智能合约代码的账户。由于智能合约的代码可用于实现区块链中的代币(如nft)交易,因此,下文中将智能合约称为代币合约。如图1所示,代币合约创建后,需要在区块链网络中进行部署,之后可以被区块链节点调用和运行,从而实现ntf的生成流转等过程。
56.以下将对现有的一些nft代币合约(下文中对nft有时会简称为token)进行介绍。
57.在nft代币合约中,可以包括一些事件(event)和函数(function)。
58.其中,事件用于事件模型,一个事件模型包括三个组成部分:事件源source(也称被监听对象)、事件event和监听对象listener。首先,由监听对象注册监听回调函数(callback),当事件源触发了事件后,监听对象会通过监听回调函数收到事件信息,然后根据事件信息进行处理。
59.函数具体可以是接口函数,用于实现某种功能,如查询一个用户拥有多少token的查询功能、将用户某个token授权给其他用户的授权功能等。
60.以下介绍一些现有nft代币合约中包括的事件和函数,当然,代币合约中可以不仅限于以下列出的事件和函数。
61.erc721合约:
62.(一)事件:
63.1、event transfer(转让事件)
64.功能:当操作者转让单个token给其他用户时,触发该事件。
65.事件参数包括:转让来源区块链地址、转让对象区块链地址,以及需转让的代币编号tokenid。
66.2、eventapproval(单个授权事件)
67.功能:当操作者授权某个tokenid下的token给其他用户时,触发该事件。
68.事件参数包括:授权来源区块链地址、授权对象区块链地址,以及需转让的代币编号tokenid。
69.3、eventapprovalforall(批量授权事件)
70.功能:当操作者授权所有token给其他用户时,触发该事件。
71.事件参数包括:授权来源用户区块链地址、授权对象用户区块链地址,以及bool参数(bool参数可指示当前操作为批量操作)。
72.(二)函数:
73.1、functionbalanceof
74.功能:查询用户有多少token。
75.调用参数包括:用户区块链地址。
76.返回值:查询得到的token数量。
77.2、function ownerof
78.功能:查询某个token的持有者。
79.调用参数包括:代币编号tokenid。
80.返回值:查询得到的持有者区块链地址。
81.3、function safetransferfrom
82.功能:无需data附加参数的安全转让,将一个用户的某个token安全转让给其他用户。
83.调用参数包括:转让来源区块链地址、转让对象区块链地址,以及需转让的代币编号tokenid。
84.4、function transferfrom
85.功能:token转让,将一个用户的某个token转让给其他用户。
86.调用参数包括:转让来源区块链地址、转让对象区块链地址,以及需转让的代币编号tokenid。
87.5、function approve
88.功能:token授权,将一个用户的某个token授权给其他用户。
89.调用参数包括:授权对象区块链地址,以及需转让的代币编号tokenid。
90.6、function getapproved
91.功能:查询某个token授权给了哪个用户。
92.调用参数包括:代币编号tokenid。
93.返回值:查询得到的用户区块链地址。
94.7、function setapprovalforall
95.功能:将当前用户的所有token授权给其他用户。
96.调用参数包括:授权对象区块链地址,以及bool_approved参数(bool_approved参数可指示当前操作为批量操作)。
97.8、function isapprovedforall
98.功能:查询是否授权了所有token给其他用户
99.调用参数包括:持有者区块链地址,以及授权对象区块链地址。
100.返回值:bool参数,若是则返回的bool参数表示真,若否则返回的bool参数表示假。
101.9、function safetransferfrom
102.功能:需要data附加参数的安全转让,将一个用户的某个token安全转让给其他用户,data附加参数用于校验转让对象是否通过erc721tokenreceiver接口接收转让。
103.调用参数包括:转让来源区块链地址、转让对象区块链地址、需转让的代币编号tokenid,以及data附加参数。
104.erc1155合约:
105.(一)事件:
106.1、event transfersingle(单个转让事件)
107.功能:当操作者转让某个tokenid下的至少一个token时,触发该事件;
108.事件参数包括:操作者区块链地址、转让来源区块链地址、转让对象区块链地址、需转让的代币编号tokenid,以及该tokenid下需转让的代币数量。
109.2、event transferbatch(批量转让事件)
110.功能:当操作者转让多个tokenid下的token,且需转让的每个tokenid下转让至少一个token时,触发该事件;
111.事件参数包括:操作者区块链地址、转让来源区块链地址、转让对象区块链地址、需转让的代币编号tokenid(数组形式),以及各tokenid下需转让的代币数量(数组形式)。
112.3、eventapprovalforall(授权事件)
113.功能:当操作者授权(或收回授权)其他用户操作自己的所有token时,触发该事件。
114.事件参数包括:操作者区块链地址、授权对象(或授权收回对象)区块链地址,以及bool_approved参数(bool_approved参数可指示当前操作为批量操作)
115.4、event uri(token url变更事件)
116.功能:当token的url发生变更时,触发该事件。
117.事件参数包括:变更后的token url,以及需变更的代币编号tokenid。
118.(二)函数:
119.1、functionbalanceof
120.功能:查询某个用户的某个tokenid下的token的余额。
121.调用参数包括:用户区块链地址,以及代币编号tokenid。
122.返回值:查询得到的余额。
123.2、functionbalanceofbatch
124.功能:查询多个用户的多个tokenid下的token的余额。
125.调用参数包括:多个用户区块链地址(数组形式),以及多个代币编号tokenid(数组形式)。
126.返回值:查询得到的多个余额(数组形式)。
127.3、function setapprovalforall
128.功能:将当前用户的所有token授权给其他用户。
129.调用参数包括:授权对象区块链地址,以及bool_approved参数(bool_approved参
数可指示当前操作为批量操作)。
130.4、function isapprovedforall
131.功能:查询当前操作者是否被其他用户授权。
132.调用参数包括:授权者区块链地址,以及当前操作者区块链地址。
133.返回值:bool参数,若是则返回的bool参数表示真,若否则返回的bool参数表示假。
134.5、function safetransferfrom
135.功能:需要data附加参数的单个安全转让,将一个用户的单个token安全转让给其他用户,data附加参数用于校验转让对象是否通过erc721tokenreceiver接口接收转让。
136.调用参数包括:转让来源区块链地址、转让对象区块链地址、需转让的代币编号tokenid、该tokenid下需转让的token数量,以及data附加参数。
137.6、function safebatchtransferfrom
138.功能:需要data附加参数的批量安全转让,将一个用户的多个token安全转让给其他用户,data附加参数用于校验转让对象是否通过erc721tokenreceiver接口接收转让。
139.调用参数包括:转让来源区块链地址、转让对象区块链地址、需转让的代币编号tokenid(数组形式)、各tokenid下需转让的token数量(数组形式),以及data附加参数。
140.在上述各代币合约中,包含了很多所需参数包括代币编号tokenid的事件和函数(下文将这些事件称为第一事件,将这些函数称为第一函数),也就是说,代币合约中的很多token功能都是基于tokenid开发的,因此,在token的整个生命周期中,需要用户提供所需操作的tokenid,才能对相应的token进行铸造、授权、转让、查询、销毁等操作。而代币编号不易记忆,易混淆,且一旦铸造便无法变更,不利于token的交易流转。
141.为解决上述问题,本技术第一实施例提供了一种代币处理方法,该方法的执行主体为区块链网络中的任一区块链节点,其中,区块链节点可实现nft的整个生命周期,包括nft的铸造、转让、授权、查询、销毁等过程)。
142.其中,区块链节点为电子设备,具体可以是台式电脑、笔记本电脑、平板电脑、手机等可加入区块链网络,实现代币交易等过程的电子设备,本技术不具体限定。
143.参照图2,该方法包括以下步骤110~步骤150。
144.步骤110:响应于携带有持有者区块链地址和用户自定义的第一代币名称的对非同质化代币的铸造触发操作,在该第一代币名称未被使用的情况下,生成第一代币编号。
145.其中,区块链账户有三大要素:公开密钥(public key,简称公钥)、私有密钥(private key,简称私钥)和账户区块链地址。公钥是可以公开的,而私钥则需进行安全保管。私钥是由随机种子生成的,公钥是将私钥通过算法推导出来。但由于公钥太长,为了简便实用,就出现了账户区块链地址,账户区块链地址是公钥推导出来的。上述涉及的推导过程是单向不可逆的,也就是说,账户区块链地址不能推导出公钥,公钥不能推导出私钥。
146.在本技术实施例中,当区块链中的一个用户想要铸造nft时,可以提供持有者区块链地址和用户自定义的第一代币名称tokenso1。其中,铸造的nft想要铸造给哪个用户,让其持有,则该用户的区块链地址即为所述的持有者区块链地址。
147.在本技术实施例中,可支持用户在铸造nft时,为nft自定义一个代币名称,其中,代币名称可以为字符形式,包括字母、数字、特殊字符(如运算符号、标点符号等)和其他字
符。相较于纯数字形式的代币编号(tokenid),用户自定义的字符形式的代币名称,有利于用户记忆,不易混淆。
148.用户在区块链节点进行对nft的铸造触发操作,从而区块链节点可以获取到用户直接或间接提供的持有者区块链地址和用户自定义的第一代币名称tokenso1。需要说明的是,在本技术实施例中,各种触发操作中所携带的信息,如区块链地址、代币名称等,可以是用户直接或间接提供的。直接提供的方式可以包括用户手动输入、手动选择(例如通过点击图标进行选择)等。间接提供的方式可以包括区块链节点根据用户的事先操作而获取信息的方式等,例如,在一可选实施例中,用户登录自己的区块链账户后,相想要将自己拥有的nft转让给他人,则区块链节点可以将该用户的区块链地址确定为转让来源区块链地址,区块链节点可根据用户登录区块链账户的事先操作,获得转让来源区块链地址,而无需用户直接提供。后文涉及到的触发操作所携带信息均可以由用户直接或间接提供,本技术实施例后续不再赘述。
149.为支持用户根据代币名称进行nft相关处理,用户自定义的代币名称需要在nft当前所属的代币合约中需要具有唯一性,也即代币名称不能重名,这一点与代币编号相同。因此,在本技术实施例中,需要确定用户自定义的第一代币名称是否已被使用,若已被使用,则可以提示用户更换代币名称。在本技术实施例中,已被使用的代币名称存有记录(如下文中用于存储代币名称和与代币名称对应的代币编号的映射关系表),可通过查询该记录,确定第一代币名称是否已被使用。
150.在第一代币名称tokenso1未被使用的情况下,区块链节点可以生成第一代币编号tokenid1,作为当前所铸造的nft的代币编号。其中,代币编号的生成可以遵循预置的生成规则,例如数字自增规则,即将上一次生成的代币编号加1,得到本次的代币编号。
151.至此,区块链节点获得了用户自定义的第一代币名称tokenso1,并且生成了需铸造的nft的第一代币编号tokenid1。
152.步骤120:铸造得到具有该第一代币编号的非同质化代币,并在铸造过程中,将第一代币编号从0地址转让至持有者区块链地址。
153.在现有技术中,代币合约可以提供默认铸造接口,该默认铸造接口中包括用于根据代币编号铸造nft的接口函数。在本步骤中,区块链节点可以以第一代币编号tokenid1为调用参数,调用该默认铸造接口,从而通过该默认铸造接口铸造得到具有第一代币编号tokenid1的非同质化代币。在铸造过程中,会产生将第一代币编号tokenid1从0地址转让至持有者区块链地址的事件。
154.步骤130:将第一代币名称和第一代币编号的映射关系,保存至预设的映射关系表中,该映射关系表用于存储代币名称和与代币名称对应的代币编号的映射关系。
155.在本步骤中,区块链节点在铸造得到具有第一代币编号tokenid1的nft之后,可以构建第一代币名称tokenso1和第一代币编号tokenid1的映射关系(tokenso1《-》tokenid1),并将该映射关系保存至映射关系表中。
156.步骤140:将第一代币名称从0地址转让至持有者区块链地址。
157.在本步骤中,产生将第一代币名称tokenso1从0地址转让至持有者区块链地址的事件,至此,完成了nft的铸造。
158.通过本技术实施例提供的代币处理方法进行nft铸造,需要产生两个转让事件,即
代币编号和代币名称的转让事件,如此,使得nft在铸造后的每一次处理,都能够支持根据代币编号和代币名称进行操作,而不是如现有技术只支持根据代币编号进行操作。
159.通过本技术实施例提供的代币处理方法所铸造得到的nft,不仅具有区块链节点生成的代币编号,还具有用户自定义的代币名称,从而用户之后可以根据nft的代币名称,对nft进行转让、授权、查询、销毁等处理,也即在nft的生命周期中,都可以根据nft的代币名称进行相应的处理操作。
160.步骤150:响应于至少携带有第二代币名称的对非同质化代币的处理触发操作,根据该第二代币名称和映射关系表,执行对非同质化代币的处理操作。
161.在本技术实施例中,不仅在nft的铸造过程中,提供了用户自定义代币名称的机制,还可以提供根据用户自定义的代币名称,对相应nft进行各种处理的机制。
162.当用户需要对nft进行某种处理(如转让、授权等)时,可以进行触发处理操作,并提供处理所需的代币名称。需要说明的是,由于用户提供的代币名称不一定是已存在的,有可能用户输入有误,因此,这里将用户提供的代币名称称为第二代币名称。
163.用户在区块链节点进行对nft的处理触发操作,从而区块链节点可以获取到用户提供的第二代币名称,进而可以根据第二代币名称、映射关系表,以及该处理触发操作所对应的处理操作类型,对nft执行该处理触发操作所对应的处理操作。
164.其中,映射关系表包括已被使用的代币名称和与其对应的代币编号之间的映射关系,因此,可以用于根据代币名称查找到对应的代币编号,以及根据代币编号查找到对应的代币名称。在映射关系表中,代币名称与代币编号一一对应。
165.另外,处理操作可以包括转让操作、授权操作、销毁操作等针对nft可进行的处理操作,相应地,处理触发操作用于触发某种处理操作的执行。例如,转让触发操作可用于触发区块链节点进行nft的转让操作;再例如,授权触发操作可用于触发区块链节点进行nft的授权操作。
166.在一种可选的实施方式中,用户在区块链节点中进行各种触发操作,可以通过用户在nft相关用户界面中,对相应操作对应图标的点击等操作实现,本技术实施例并不旨在对用户进行各种触发操作的具体方式进行限定,只要能够使用户通过用户界面,触发区块链节点执行对nft的操作即可。
167.在本技术实施例提供的代币处理方法中,区块链用户可以在铸造nft时,对nft自定义代币名称,并在区块链节点进行铸造触发操作,该铸造触发操作携带有持有者区块链地址和用户自定义的第一代币名称。区块链节点响应于该铸造触发操作,在第一代币名称未被使用的情况下,可以生成第一代币编号,进而铸造得到具有第一代币编号的nft,铸造过程中,将第一代币编号从0地址转让至持有者区块链地址。之后,区块链节点将第一代币名称和第一代币编号的映射关系,保存至映射关系表中。然后,将第一代币名称也从0地址转让至持有者区块链地址,至此完成铸造。铸造完成后,当区块链用户需要对nft进行转让、授权、销毁等处理时,可以在区块链节点进行相应的处理触发操作,该处理触发操作至少携带有用户提供的第二代币名称,区块链节点可以根据第二代币名称和映射关系表,执行对nft的处理操作。
168.由于nft铸造时,支持区块链用户对nft自定义代币名称,并与nft的代币编号进行了绑定,形成了代币名称和代币编号的映射关系,从而在nft的整个生命周期中,可以支持
区块链用户通过代币名称对nft进行各种处理,使得区块链用户无需记忆纯数字形式的代币编号,通过自定义的代币名称即可对nft进行各种处理,提高了用户对nft操作的便捷性,进而能够提高nft的生成流转效率。
169.在一种实施方式中,上述代币处理方法可以应用于以太坊平台。
170.在另一种实施方式中,上述代币处理方法中的nft铸造过程,可以通过代币合约中针对该方法新增的铸造接口实现。该新增铸造接口可根据用户自定义的代币名称进行nft的铸造,而上文提及的默认铸造接口可根据区块链节点生成的代币编号进行nft的铸造,因此,该新增铸造接口的接口函数中可以包括用于调用上文提及的默认铸造接口的调用语句,该新增铸造接口可以先根据代币名称,从映射关系表中查找到对应的代币编号,进而通过代币编号调用默认铸造接口,以实现nft的铸造。
171.在另一种实施方式中,上述代币处理方法中的nft处理过程,也可以通过代币合约中针对该方法新增的处理接口实现,新增处理接口可根据代币名称实现nft的处理。其中,一种处理操作可以对应新增一种处理接口,区块链节点通过调用相应的处理接口,可以实现相应的基于代币名称的nft处理操作。
172.例如,在本技术实施例提供的代币处理方法中,nft转让过程可以通过代币合约中新增的转让接口实现,新增转让接口可根据代币名称实现nft的转让。区块链节点通过调用新增的转让接口,可以实现基于代币名称的nft转让操作。
173.在一种实施方式中,上述步骤中的处理触发操作可以包括转让触发操作、授权触发操作和销毁触发操作中的至少一种,相应地,上述步骤中的处理操作包括转让操作、授权操作和销毁操作中的至少一种。
174.其中,转让触发操作可用于触发转让操作的执行,授权触发操作可用于触发授权操作的执行,销毁触发操作可用于触发销毁操作的执行。
175.在本实施例方式中,用户进行的处理触发操作可以涵盖nft的转让、授权、销毁过程,涉及了nft生命周期中的交易过程和生命周期结束,使得用户在nft的整个生命周期内,都能够通过代币名称进行nft的交易和销毁,提高了nft整个生命周期内的用户操作便捷性。
176.参照图3,基于上述实施方式,可选地,步骤s150可以包括以下步骤s151~s153。
177.步骤s151:响应于携带有第二代币名称、第一区块链地址和第二区块链地址的对非同质化代币的处理触发操作,在映射关系表中,查找第二代币名称对应的代币编号。
178.在步骤s151中,用户在区块链节点中进行对nft的处理触发操作,从而区块链节点可以获取到该处理触发操作所携带的第二代币名称、第一区块链地址和第二区块链地址。在nft的一些处理操作(如nft的转让操作、授权操作、销毁操作)中,需要将nft从一个区块链地址转让至另一个区块链地址,因此,需要能够区分出第一区块链地址和第二区块链地址的各自含义,也即在第一区块链地址和第二区块链地址中,区分出哪个是转让前区块链地址,哪个是转让后区块链地址。为此,在一种可选的实施方式中,区块链节点可以通过ui(user interface,用户界面)设计,区分第一区块链地址和第二区块链地址的含义,例如在界面中设计两个底层对应分别不同含义的表单域,通过第一表单域获取到的第一区块链地址可作为转让前区块链地址,通过第二表单域获取到的第二区块链地址可作为转让后区块链地址。当然,本技术实施例并不旨在对第一区块链地址和第二区块链地址的获取方式和
区分方式进行具体限定。
179.在本技术实施例中,对于不同的处理触发操作,第一区块链地址有所不同,第二区块链地址也会有所不同,以下具体介绍。
180.1、在处理触发操作具体为转让触发操作的情况下,第一区块链地址可以为持有者区块链地址或者已授权对象区块链地址,第二区块链地址可以为转让对象区块链地址。
181.其中,在nft的转让操作通过调用nft转让接口实现的情况下,nft转让接口的调用者应为nft持有者或已被授权该nft的用户,因此,第一区块链地址可以为持有者区块链地址或者已授权对象区块链地址。
182.2、在处理触发操作具体为授权触发操作的情况下,第一区块链地址可以为持有者区块链地址或者已授权对象区块链地址,第二区块链地址可以为授权对象区块链地址。
183.其中,在nft的授权操作通过调用nft授权接口实现的情况下,nft授权接口的调用者应为nft持有者或已被授权该nft的用户,因此,第一区块链地址可以为持有者区块链地址或者已授权对象区块链地址。
184.3、在处理触发操作具体为销毁触发操作的情况下,第一区块链地址可以为持有者区块链地址,第二区块链地址可以为0地址。
185.其中,在nft的销毁操作通过调用nft销毁接口实现的情况下,nft销毁接口的调用者应为nft持有者,因此,第一区块链地址可以为持有者区块链地址。
186.当然,上述各处理接口的调用者,可以在代币合约中通过调用权限进行限制,调用者具体可以是哪些用户,也可以根据具体的业务需求进行设置,本技术实施例对此不作具体限定。
187.在本技术实施例中,对于不同的处理操作,分别限制了nft的转让前区块链地址,也即对不同处理操作的可操作用户进行了限制,或者说,对用户所能够进行的处理操作进行了限制,如此,降低了nft被无权限用户修改的风险,提高了nft的安全性。
188.在步骤s151中,区块链节点获取到第二代币名称、第一区块链地址和第二区块链地址后,可以在映射关系表中,查找该第二代币名称对应的代币编号。
189.步骤s152:在查找到第二代币名称对应的代币编号为第二代币编号的情况下,对具有第二代币编号的非同质化代币,执行处理触发操作对应的处理操作,并在处理过程中,将第二代币编号从第一区块链地址转让至第二区块链地址。
190.上文已提及,用户提供的代币名称不一定是已存在的,有可能用户输入有误,因此,有可能在映射关系表中,能够查找到第二代币名称对应的代币编号,也有可能查找不到。若查找不到,则可以提示用户,其提供的代币名称有误。若查找到,则可以对具有所查找到的第二代币编号的nft,进行处理触发操作对应的处理操作。
191.在处理过程中,可以产生将第二代币编号从第一区块链地址转让至第二区块链地址的事件。
192.步骤s153:将第二代币名称从第一区块链地址转让至第二区块链地址。
193.在本步骤中,在对具有第二代币编号的nft完成处理操作后,产生将第二代币名称从第一区块链地址转让至第二区块链地址的事件。
194.通过本技术实施例提供的代币处理方法进行nft转让、授权和销毁,均需要产生两个转让事件,即代币编号和代币名称的转让事件,如此,使得nft在铸造后的每一次处理,都
能够支持根据代币编号和代币名称进行操作,而不是如现有技术只支持根据代币编号进行操作。
195.进一步可选地,参照图3,对于nft的销毁操作,在上述步骤s152之后,还可以包括以下步骤s154。
196.步骤s154:删除映射关系表中的第二代币名称和第二代币编号的映射关系。
197.其中,在nft铸造时,创建了该nft的代币名称和代币编号的映射关系,并存入了映射关系表,而在对nft进行销毁时,可以将该nft的代币名称和代币编号的映射关系,从映射关系表中删除,删除后,该nft的代币名称将被认为是未被使用过,之后用户可以再次采用该代币名称。当然,在实际应用中,区块链节点可以提示用户,该代币名称可以再次使用。如此,对于用户非常想使用的,或者对其具有意义的代币名称,能够允许用户再次使用,提高了用户体验。
198.当然,若不删除该映射关系,则nft仍能够正常销毁,只是该nft的代币名称不能够再用来命名nft。
199.在一种实施方式中,处理触发操作还可以包括代币名称修改触发操作,相应地,处理操作还包括代币名称修改操作。
200.由于本技术实施例为nft引入了代币名称的属性,并且提供了根据代币名称对nft进行铸造、转让、授权、销毁等处理的实现方式,因此,在本实施方式中,还进一步提供了代币名称修改功能,以使用户能够根据自身需求,对nft的代币名称进行修改。
201.基于代币名称可修改的实施方式,参照图3,步骤s150还可以包括以下步骤s155。
202.步骤s155:响应于携带有旧代币信息和作为新代币名称的第二代币名称的对非同质化代币的代币名称修改触发操作,执行以下目标步骤,包括s01~s04:
203.s01:在映射关系表中,查找旧代币信息的映射关系,其中,旧代币信息包括作为旧代币名称的第一代币名称和作为代币编号的第一代币编号中的至少一者;
204.s02:在查找到的情况下,将需修改的非同质化代币的代币名称从第一代币名称修改为第二代币名称;
205.s03:将映射关系表中的第一代币名称和第一代币编号的映射关系,变更为第二代币名称和第一代币编号的映射关系;
206.s04:对于修改代币名称后的非同质化代币,产生非同质化代币的代币名称变更事件,以在后续处理过程中,将第二代币名称作为非同质化代币的旧代币名称。
207.在该实施方式中,当用户需要修改nft的代币名称时,可以在区块链节点进行代币名称修改触发操作,从而区块链节点可以获取到用户提供的旧代币信息,以及作为新代币名称的第二代币名称tokenso2。其中,旧代币信息可以是作为旧代币名称的第一代币名称tokenso1,和/或作为代币编号的第一代币编号tokenid1。
208.旧代币信息为tokenso1时,区块链节点可以在映射关系表中,查找tokenso1的映射关系,若查找到,则可以返回tokenso1对应的tokenid1,作为查找结果,有代币编号返回值,即表示存在该tokenso1的映射关系,表明了当前代币合约中存在用户想要修改代币名称的nft。
209.类似地,旧代币信息为tokenid1时,区块链节点可以在映射关系表中,查找tokenid1的映射关系,若查找到,则可以返回tokenid1对应的tokenso1,作为查找结果,有
代币名称返回值,即表示存在该tokenid1的映射关系,表明了当前代币合约中存在用户想要修改代币名称的nft。
210.在能够返回tokenso1对应的tokenid1,或者返回tokenid1对应的tokenso1的情况下,表示用户想要修改的nft存在,进而区块链节点可以将所需修改的nft的代币名称,从第一代币名称tokenso1修改为第二代币名称tokenso2。
211.之后,区块链节点可以将映射关系表中的tokenso1和tokenid1的映射关系,变更为tokenso2和tokenid1的映射关系。其中,变更方式可以是删除原映射关系,然后增加新的映射关系,也可以是将原映射关系中的代币名称从tokenso1替换为tokenso2,本技术实施例对此不作具体限定。
212.再之后,对于修改代币名称后的nft,区块链节点产生该nft的代币名称变更事件,以在后续处理过程中,将第二代币名称tokenso2作为该nft的旧代币名称。也即在代币名称修改前,该nft最新版的旧代币名称是tokenso1,经过修改后,该nft最新版的旧代币名称是tokenso2。
213.在现有技术中,代币编号一旦铸造便无法变更,而在本实施方式中,代币名称可以进行修改,从而用户可以根据自身需求变更nft的代币名称,满足了用户对代币名称的多样性需求,提高了用户体验。
214.进一步地,在该实施方式的基础上,代币合约的开发者还可以针对全部或个别的nft,设置代币名称的可修改次数最大值,例如设置全部nft的代币名称可修改次数最大值为3次,也即用户对nft的代币名称最多只能修改3次。相应地,参照图3,步骤s150还可以包括以下步骤s156~s158。
215.步骤s156:响应于携带有旧代币信息和作为新代币名称的第二代币名称的对非同质化代币的代币名称修改触发操作,判断需修改的非同质化代币的代币名称已修改次数是否大于或等于预设次数;
216.步骤s157:若是,则将提示信息输出至用户界面,其中,该提示信息用于提示需修改的非同质化代币已无法修改代币名称;
217.步骤s158:若否,则执行目标步骤(s01~s04),并将需修改的非同质化代币的代币名称已修改次数增加一次。
218.在本实施方式中,区块链节点响应于对nft的代币名称修改触发操作,首先可以判断需修改的nft代币名称已修改次数,是否大于或等于预设次数(即代币名称的可修改次数最大值),从而判断对所需修改的nft是否还能进行代币名称的修改。若大于或等于该预设次数,则说明该nft已无法修改代币名称,进而区块链节点可以输出提示信息提示用户。若小于该预设次数,则说明该nft还能修改代币名称,进而区块链节点可以执行上文所述的目标步骤s01~s04,以实现该nft的代币名称的修改。并且,在代币名称修改完毕后,还需要将该nft的代币名称已修改次数增加一次。
219.通过限制代币名称的修改次数,可以在多数情况下避免用户无限次的修改代币名称,进而避免了区块链计算资源的浪费。
220.其中,需要特别说明的是,在一种可选方案中,预设次数可以不支持变更,相应地,在步骤s156中,只需判断需修改的nft的代币名称已修改次数是否等于预设次数即可。
221.但是,在实际应用中,还可以存在另一种可选方案,即预设次数支持变更,这样就
可能会出现以下情况:变更后的预设次数小于变更后的预设次数,例如变更前预设次数为5次,变更后预设次数为3次。对于这种情况,若在预设次数变更前,用户已进行了4次修改,且步骤s156中又只判断已修改次数是否等于预设次数,而不判断是否大于预设次数,则在预设次数调小(如从5次调至3次)后,该nft将会符合步骤s158的情况(即已修改次数4次不等于预设次数3次),使得该nft可以继续被修改代币名称。但是,这种情况下,将使得用户突破代币名称修改次数的限制(因为之后每次判断结果都会是不等于),而能够无限次的修改该nft的代币名称,直至预设次数被变更为大于或等于当前已修改次数时(例如在用户修改了6次后,预设次数从3次变更为7次及以上),这种能够无限次修改代币名称的情况才能够终止。
222.因此,基于上述另一种可选方案,在判断代币名称已修改次数是否等于预设次数的基础上,进一步增加判断条件,即判断代币名称已修改次数是否大于预设次数,从而能够在绝大多数情况下,避免用户无限次的修改代币名称,进一步避免了区块链计算资源的浪费。
223.在一种实施方式中,处理触发操作还可以包括信息查询触发操作,相应地,处理操作还包括信息查询操作。
224.由于本技术实施例为nft引入了代币名称的属性,并且提供了根据代币名称对nft进行铸造、转让、授权、销毁等处理的实现方式,因此,在本实施方式中,还进一步提供了根据代币名称查询nft信息的功能,以使用户能够根据自定义的代币名称,对nft的各种信息进行查询,包括nft的代币编号的查询。
225.相应地,参照图3,步骤s150还可以包括以下步骤s159~s1511。
226.步骤s159:响应于携带有第二代币名称的信息查询触发操作,从映射关系表中,查找第二代币名称对应的代币编号。
227.在本步骤中,当用户需要查询nft的信息时,可以在区块链节点进行信息查询触发操作,从而区块链节点可以获取到用户提供的第二代币名称。进而区块链节点可以在映射关系表中,查找第二代币名称对应的代币编号。
228.若用户提供了已存在的第二代币名称,则区块链节点可以在映射关系表中,查找到第二代币名称对应的代币编号。
229.若用户提供了不存在的第二代币名称,则区块链节点无法在映射关系表中,查找到第二代币名称对应的代币编号。
230.步骤s1510:在查找到第二代币名称对应的代币编号为第二代币编号的情况下,根据第二代币编号,生成信息查询结果。
231.步骤s1511:将信息查询结果输出至用户界面。
232.在步骤s1510~s1511中,在映射关系表中查找到第二代币名称对应的代币编号的情况下,说明用户正确提供了代币名称,则区块链节点可以根据第二代币名称对应的代币编号(即第二代币编号),生成信息查询结果,并将该信息查询结果显示在用户界面上,以供用户查看。
233.在一种实施方式中,用户可以根据代币名称,查询除代币编号以外的nft信息(为了方便描述,下文将该查询功能简称为查询功能1)。查询功能1所能够查询到的nft信息,与现有技术中根据代币编号能够查询到的nft信息相同,也即是查询功能1,能够根据用户自
定义的代币名称,实现现有技术中的nft信息查询功能。
234.另外,由于本技术实施例提供了用户自定义代币名称的功能,因此,本技术实施例在上述查询功能1的基础上,还增加了根据代币名称查询代币编号的查询功能(为了方便描述,下文将该查询功能简称为查询功能2),使得用户能够根据容易记忆的代币名称,查询到不易记忆的代币编号。查询功能2的一种应用场景示例是:方便用户在nft操作时,进行nft信息的双重确认,避免用户操作了错误的nft。
235.具体地,对于上述查询功能1,步骤s1510可以通过以下步骤实现:
236.在查找到第二代币名称对应的代币编号为第二代币编号的情况下,将第二代币编号作为调用参数,调用默认信息查询接口,其中,默认信息查询接口用于根据代币编号查询得到代币信息;
237.通过默认信息查询接口返回信息查询结果。
238.其中,区块链节点将在映射关系表中查找到的第二代币编号作为调用参数,对默认信息查询接口进行调用,该默认信息查询接口能够根据代币编号查询得到代币信息,该代币信息即为默认信息查询接口的返回值。默认信息查询接口的返回值,即为查询功能1所得的信息查询结果。
239.对于上述查询功能2,步骤s1510可以通过以下步骤实现:
240.在查找到第二代币名称对应的代币编号为第二代币编号的情况下,将第二代币编号确定为信息查询结果。
241.此外,在本技术实施例的一种可选实施方式中,映射关系表可以包括第一映射关系表(tokenso-》tokenid)和第二映射关系表(tokenid-》tokenso)。其中,第一映射关系表(tokenso-》tokenid)用于存储从代币名称映射到与代币名称对应的代币编号的单向映射关系,第二映射关系表(tokenid-》tokenso)用于存储从代币编号映射到与代币编号对应的代币名称的单向映射关系。
242.相应地,第一代币名称和第一代币编号的映射关系包括第一映射关系(tokenso1-》tokenid1)和第二映射关系(tokenid1-》tokenso1)。其中,第一映射关系(tokenso1-》tokenid1)为从第一代币名称映射到第一代币编号的单向映射关系,第二映射关系(tokenid1-》tokenso1)为从第一代币编号映射到第一代币名称的单向映射关系。
243.在本技术实施例中,映射关系表可以通过键值对的形式构建,从而可以通过键,查表得到对应的键值。其中,第一映射关系表将代币名称tokenso作为键(key),将代币编号tokenid作为键值(value),从而可以通过代币名称tokenso,查表得到对应的代币编号tokenid。第二映射关系表将代币编号tokenid作为键(key),将代币名称tokenso作为键值(value),从而可以通过代币编号tokenid,查表得到对应的代币名称tokenso。
244.在本技术实施例中,对于通过代币名称查找代币编号,以及通过代币编号查找代币名称这两种查表需求,可以通过分别查询不同的单向映射关系表实现,相较于两种查表需求通过查询一个双向映射关系表实现的方案,可以支持更多的查表请求同步进行,提高了查表效率。
245.例如,在一场景示例中,一个映射关系表(不论单向双向)可以支持n个查表请求的同步处理,也即支持n个查表操作同时进行,对于这种情况,通过设置两个单向映射关系表,可以支持2n个查表操作同时进行,从而提高了查表效率。
246.在本技术实施例中,代币名称可由用户自定义,代币合约内具有唯一性,且支持用户修改,有利于用户记忆,用户通过代币名称对nft进行操作,提高了用户操作nft的便捷性,提高了nft的交易流转效率。
247.本技术第二实施例提供了一种代币合约部署方法,该方法的执行主体为可以与区块链网络进行通信连接的部署设备,其中,部署设置可以为服务器、服务器集群、终端等电子设备,本技术实施例对此不作限定限定。
248.其中,本技术第二实施例可以在本技术第一实施例之前实施。在以太坊平台应用于该区块链网络的情况下,本技术第一实施例可以由登录有用户账户的区块链节点实现,本技术第二实施例可以由登录有合约账户的部署设备实现。
249.参照图4,该方法包括以下步骤s210~步骤s230。
250.步骤s210:响应于对非同质化代币所属的代币合约的修改操作,在代币合约中,创建映射关系表,该映射关系表用于存储代币名称和与代币名称对应的代币编号的映射关系。
251.在本步骤中,当合约开发者需要开发新的代币合约,用以实现本技术第一实施例中所述的代币处理方法时,可以在现有代币合约的基础上增加功能,以形成新的代币合约。合约开发者可以触发代币合约的修改操作,部署设备响应于该修改操作,首先可以在现有代币合约中,创建映射关系表,用于保存已被使用的代币名称和与代币名称对应的代币编号的映射关系。
252.在一可选的具体方案中,可创建一个从代币名称映射到代币编号的第一映射关系表(tokenso-》tokenid),以及一个从代币编号映射到代币名称的第二映射关系表(tokenid-》tokenso)。
253.在一种实施方式中,可以通过mapping函数(映射函数)实现映射关系表的创建。
254.该映射关系表可以用于实现本技术第一实施例中所提及的各种查表操作,包括根据代币名称查找代币编号的查表操作,以及根据代币编号查找代币名称的查表操作。
255.步骤s220:根据代币合约中所需参数包括代币编号的各第一事件和各第一函数,在代币合约中对应增加所需参数包括代币名称的功能相同的各第二事件和各第二函数,以获得更新后的代币合约。
256.其中,第二函数中包括查表语句和调用语句,该查表语句用于根据该映射关系表,查找代币名称对应的代币编号,该调用语句用于根据查找得到的代币编号,调用与第二函数功能相同的第一函数。
257.需要首先说明的是,函数的功能相同,是指第二函数与第一函数的返回值/所实现的目的相同,而相同功能的第二函数和第一函数的调用参数可以不同。事件的功能相同,是指第二事件与第一事件所触发的事件处理函数(第二事件可触发第二函数,第一事件可触发第一函数)的功能相同。
258.在一种实现方式中,增加第二事件和第二函数的具体实现方式可以是,部署设备接收合约开发者输入的第二事件和第二函数的相关代码。下文涉及的增加其他事件或函数的方式,也可参考此处的具体实现方式。
259.其中,参照相关技术介绍中关于事件模型的内容,事件与函数的关系是:用户触发了某事件,然后针对该事件执行事件处理函数,或者说针对该事件调用事件处理接口的时
候,默认会向事件处理函数/接口传入一个event对象,该event对象所包含事件参数,包括了事件处理函数/接口所需的调用函数。进而通过事件处理函数/接口,可以实现事件的处理,包括上述提及的nft的铸造、转让、授权、销毁等处理。
260.在本步骤中,对于现有代币合约中基于代币编号的各个第一事件和各个第一函数,可以在代币合约中对应增加功能相同的、基于代币名称的各个第二事件和各个第二函数。当然,在增加各个第二函数的函数体之前,需要增加各个第二事件和各个第二函数的声明。
261.以下以相关技术中介绍的erc721合约和erc1155合约为例进行详细说明。
262.在erc721合约中,所需参数包括代币编号的第一事件有:
263.1、event transfer;
264.2、eventapproval。
265.在erc721合约中,所需参数包括代币编号的第一函数有:
266.2、function ownerof;
267.3、function safetransferfrom;
268.4、function transferfrom;
269.5、function approve;
270.6、function getapproved;
271.9、function safetransferfrom。
272.相应地,可以在现有erc721合约中,增加以下第二事件:
273.1、新的event transfer(对应erc721第一事件1)
274.功能:与erc721第一事件1相同。
275.事件参数包括:转让来源区块链地址、转让对象区块链地址,以及需转让的代币名称tokenso。
276.2、新的eventapproval(对应erc721第一事件2)
277.功能:与erc721第一事件2相同。
278.事件参数包括:授权来源区块链地址、授权对象区块链地址,以及需转让的代币名称tokenso。
279.相应地,可以在现有erc721合约中,增加以下第二函数:
280.1、新的function ownerof(对应erc721第一函数2)
281.功能:与erc721第一函数2相同。
282.调用参数包括:代币名称tokenso。
283.返回值:与erc721第一函数2相同。
284.2、新的function safetransferfrom(对应erc721第一函数3)
285.功能:与erc721第一函数3相同。
286.调用参数包括:转让来源区块链地址、转让对象区块链地址,以及需转让的代币名称tokenso。
287.返回值:与erc721第一函数3相同。
288.3、新的functiontransferfrom(对应erc721第一函数4)
289.功能:与erc721第一函数4相同。
290.调用参数包括:转让来源区块链地址、转让对象区块链地址,以及需转让的代币名称tokenso。
291.返回值:与erc721第一函数4相同。
292.4、新的function approve(对应erc721第一函数5)
293.功能:与erc721第一函数5相同。
294.调用参数包括:授权对象区块链地址,以及需转让的代币名称tokenso。
295.返回值:与erc721第一函数5相同。
296.5、新的function getapproved(对应erc721第一函数6)
297.功能:与erc721第一函数6相同。
298.调用参数包括:代币名称tokenso。
299.返回值:与erc721第一函数6相同。
300.6、新的function safetransferfrom(对应erc721第一函数9)
301.功能:与erc721第一函数9相同。
302.调用参数包括:转让来源区块链地址、转让对象区块链地址、需转让的代币名称tokenso,以及data附加参数。
303.返回值:与erc721第一函数9相同。
304.可选地,由于第二函数2、3和6,都能够实现nft的转让,且第二函数6涵盖了第二函数2和3的功能,因此,在第二函数2、3和6中,可以只增加第二函数6。
305.在erc1155合约中,所需参数包括代币编号的第一事件有:
306.1、event transfersingle;
307.2、event transferbatch;
308.4、event uri。
309.在erc1155合约中,所需参数包括代币编号的第一函数有:
310.1、functionbalanceof;
311.2、functionbalanceofbatch;
312.5、function safetransferfrom;
313.6、function safebatchtransferfrom。
314.相应地,可以在现有erc1155合约中,增加以下第二事件:
315.1、event transfersingle(对应erc1155第一事件1)
316.功能:与erc1155第一事件1相同。
317.事件参数包括:操作者区块链地址、转让来源区块链地址、转让对象区块链地址、需转让的代币名称tokenso,以及该tokenso下需转让的代币数量。
318.2、event transferbatch(对应erc1155第一事件2)
319.功能:与erc1155第一事件2相同。
320.事件参数包括:操作者区块链地址、转让来源区块链地址、转让对象区块链地址、需转让的代币名称tokenso(数组形式),以及各tokenso下需转让的代币数量(数组形式)。
321.3、event uri(对应erc1155第一事件4)
322.功能:与erc1155第一事件4相同。
323.事件参数包括:变更后的token url,以及需变更的代币名称tokenso。
324.相应地,可以在现有erc1155合约中,增加以下第二函数:
325.1、新的functionbalanceof(对应erc1155第一函数1)
326.功能:与erc1155第一函数1相同。
327.调用参数包括:用户区块链地址,以及代币名称tokenso。
328.返回值:与erc1155第一函数1相同。
329.2、新的functionbalanceofbatch(对应erc1155第一函数2)
330.功能:与erc1155第一函数2相同。
331.调用参数包括:多个用户区块链地址(数组形式),以及多个代币名称tokenso(数组形式)。
332.返回值:与erc1155第一函数2相同。
333.3、新的function safetransferfrom(对应erc1155第一函数5)
334.功能:与erc1155第一函数5相同。
335.调用参数包括:转让来源区块链地址、转让对象区块链地址、需转让的代币名称tokenso、该tokenso下需转让的token数量,以及data附加参数。
336.返回值:与erc1155第一函数5相同。
337.4、新的function safebatchtransferfrom(对应erc1155第一函数6)
338.功能:与erc1155第一函数6相同。
339.调用参数包括:转让来源区块链地址、转让对象区块链地址、需转让的代币名称tokenso(数组形式)、各tokenso下需转让的token数量(数组形式),以及data附加参数。
340.返回值:与erc1155第一函数6相同。
341.在本技术实施例中,上述各第二函数用于实现本技术第一实施例中的各种基于代币名称的操作。
342.在一种实施方式中,函数可以封装为接口形式,相应地,调用函数可以是调用用于执行该函数的接口。在本技术实施例中,第一函数可以为接口函数,也即第一函数的执行可以通过调用相应的接口实现。对于该实施方式,第二函数也可以为接口函数,可以增加用于执行第二函数的接口,也即第二函数的执行也可以通过调用相应的新增接口实现。
343.另外,可选地,可以将所需参数包括代币编号的各第一事件和各第一函数,保留在代币合约中,从而使得更新后的代币合约能够同时提供根据代币名称进行nft处理的功能,以及根据代币编号进行nft处理的功能,用户既可以根据代币名称进行nft操作,也可以根据代币编号进行nft操作,合约功能更加全面,能够满足用户不同的操作需求。当然,在实际应用中,也可以将所需参数包括代币编号的各第一事件和各第一函数,从代币合约中删除,仅保留根据代币名称进行nft处理的功能,本技术实施例对此不作限定。
344.在增加各第二事件和各第二函数之后,可以进行必要的代码处理过程,如代码编译等,从而获得更新后的代币合约。在本技术实施例中,更新后的代币合约是指合约内容已更新,且已经能够进行部署的代币合约。
345.步骤s230:在与区块链网络通信连接的情况下,将更新后的代币合约部署在区块链网络中。
346.合约开发者可以在部署设备中,触发代币合约的部署操作,从而通过区块链网络的地址,实现与区块链网络之间的通信连接,进而将更新后的代币合约部署在区块链网络
中。其中,代币合约的部署方式可以参考现有的相关技术,本技术实施例在此不再赘述。
347.在本技术实施例提供的代币合约更新方法中,对于现有代币合约中基于代币编号的nft功能,可以对应增加功能相同的、基于用户自定义代币名称的nft功能。新增的基于代币名称的nft功能,首先可以基于代币名称和代币编号的映射关系表,查找到代币名称对应的代币编号,进而可以通过代币编号,调用基于代币编号实现nft功能的函数。通过该方法进行代币合约的部署,可以使后续的nft业务,支持用户自定义代币名称,并根据代币名称进行nft操作。
348.进一步地,参照图5,在一种实施方式中,在步骤s230之前,该代币合约部署方法还可以包括以下步骤s240~s260:
349.步骤s240:在代币合约中,增加代币名称变更事件。
350.在本步骤中,可以在代币合约中增加以下事件:
351.event changetokenso(代币名称变更事件)
352.功能:当操作者修改token代币名称时,触发该事件。
353.事件参数包括:旧代币信息(token的旧代币名称和/或token的代币编号),以及新代币名称tokenso。
354.步骤s250:在代币合约中,增加用于修改代币名称的第三函数。
355.在本步骤中,可以在代币合约中增加以下函数:
356.functionmodifytokenso
357.功能:修改token的代币名称。
358.调用参数包括:token的旧代币信息(token的旧代币名称和/或token的代币编号),以及新代币名称tokenso。
359.步骤s260:在代币合约中,增加用于根据代币名称查询该代币名称对应的代币编号的第四函数。
360.在本步骤中,可以在代币合约中增加以下函数:
361.function gettokenid
362.功能:根据token的代币名称查询该token的代币编号。
363.调用参数包括:代币名称tokenso。
364.返回值:代币编号tokenid。
365.通过上述步骤s240~s260,可以在代币合约中增加代币名称修改功能,以及根据代币名称查询代币编号的功能,相应地,在进行nft实际业务时,支持用户修改nft的代币名称,以及根据nft代币名称查询nft代币编号。
366.需要说明的是,上述提及的、所需参数包括代币名称的各事件和各函数,可以根据实际需求进行增加,本技术实施例并不旨在对增加哪些事件或函数作具体限定。可以理解的是,在进行nft实际业务时,根据代币名称所能够实现的nft功能有哪些,取决于事先在代币合约中,增加了用于实现哪些nft功能的事件或函数。
367.在本技术实施例中,参照图6,合约管理者可以在现有代币合约的基础上,进行新代币合约的开发,从而在根据代币编号进行nft操作的基础上,增加了根据代币名称进行nft操作的功能。然后,可以将新代币合约部署在区块链网络中。完成合约部署后,区块链用户可以调用新代币合约,从而可根据代币名称/代币编号进行nft操作。
368.与本技术第一实施例提供的代币处理方法相对应的,本技术实施例还提供一种代币处理装置700。如图7所示,所述装置包括:
369.生成模块701,用于响应于携带有持有者区块链地址和用户自定义的第一代币名称的对非同质化代币的铸造触发操作,在所述第一代币名称未被使用的情况下,生成第一代币编号;
370.铸造模块702,用于铸造得到具有所述第一代币编号的非同质化代币,并在铸造过程中,将所述第一代币编号从0地址转让至所述持有者区块链地址;
371.保存模块703,用于将所述第一代币名称和所述第一代币编号的映射关系,保存至预设的映射关系表中,所述映射关系表用于存储代币名称和与所述代币名称对应的代币编号的映射关系;
372.转让模块704,用于将所述第一代币名称从0地址转让至所述持有者区块链地址;
373.处理模块705,用于响应于至少携带有第二代币名称的对非同质化代币的处理触发操作,根据所述第二代币名称和所述映射关系表,执行对所述非同质化代币的处理操作。
374.与本技术第二实施例提供的代币处理方法相对应的,本技术实施例还提供一种代币合约部署装置800。如图8所示,所述装置包括:
375.创建模块801,用于响应于对非同质化代币所属的代币合约的修改操作,在所述代币合约中,创建映射关系表,所述映射关系表用于存储代币名称和与所述代币名称对应的代币编号的映射关系;
376.增加模块802,用于根据所述代币合约中所需参数包括代币编号的各第一事件和各第一函数,在所述代币合约中对应增加所需参数包括代币名称的功能相同的各第二事件和各第二函数,以获得更新后的代币合约;
377.部署模块803,用于在与区块链网络通信连接的情况下,将所述更新后的代币合约部署在所述区块链网络中;
378.其中,所述第二函数中包括查表语句和调用语句,所述查表语句用于根据所述映射关系表,查找代币名称对应的代币编号,所述调用语句用于根据查找得到的代币编号,调用与所述第二函数功能相同的所述第一函数。
379.与本技术第一实施例提供的代币处理方法相对应的,本技术实施例还提供了一种用于处理代币的电子设备。如图9所示,所述电子设备包括:处理器901;以及存储器902,用于存储代币处理方法的程序,该设备通电并通过所述处理器运行该代币处理方法的程序后,执行如下步骤:
380.响应于携带有持有者区块链地址和用户自定义的第一代币名称的对非同质化代币的铸造触发操作,在所述第一代币名称未被使用的情况下,生成第一代币编号;
381.铸造得到具有所述第一代币编号的非同质化代币,并在铸造过程中,将所述第一代币编号从0地址转让至所述持有者区块链地址;
382.将所述第一代币名称和所述第一代币编号的映射关系,保存至预设的映射关系表中,所述映射关系表用于存储代币名称和与所述代币名称对应的代币编号的映射关系;
383.将所述第一代币名称从0地址转让至所述持有者区块链地址;
384.响应于至少携带有第二代币名称的对非同质化代币的处理触发操作,根据所述第二代币名称和所述映射关系表,执行对所述非同质化代币的处理操作。
385.与本技术第二实施例提供的代币合约部署方法相对应的,本技术实施例还提供了一种用于部署代币合约的电子设备。如图10所示,所述电子设备包括:处理器1001;以及存储器1002,用于存储代币合约部署方法的程序,该设备通电并通过所述处理器运行该代币合约部署方法的程序后,执行如下步骤:
386.响应于对非同质化代币所属的代币合约的修改操作,在所述代币合约中,创建映射关系表,所述映射关系表用于存储代币名称和与所述代币名称对应的代币编号的映射关系;
387.根据所述代币合约中所需参数包括代币编号的各第一事件和各第一函数,在所述代币合约中对应增加所需参数包括代币名称的功能相同的各第二事件和各第二函数,以获得更新后的代币合约;
388.在与区块链网络通信连接的情况下,将所述更新后的代币合约部署在所述区块链网络中;
389.其中,所述第二函数中包括查表语句和调用语句,所述查表语句用于根据所述映射关系表,查找代币名称对应的代币编号,所述调用语句用于根据查找得到的代币编号,调用与所述第二函数功能相同的所述第一函数。
390.与本技术第一实施例提供的代币处理方法相对应的,本技术实施例提供一种计算机可读存储介质,存储有代币处理方法的程序,该程序被处理器运行,执行下述步骤:
391.响应于携带有持有者区块链地址和用户自定义的第一代币名称的对非同质化代币的铸造触发操作,在所述第一代币名称未被使用的情况下,生成第一代币编号;
392.铸造得到具有所述第一代币编号的非同质化代币,并在铸造过程中,将所述第一代币编号从0地址转让至所述持有者区块链地址;
393.将所述第一代币名称和所述第一代币编号的映射关系,保存至预设的映射关系表中,所述映射关系表用于存储代币名称和与所述代币名称对应的代币编号的映射关系;
394.将所述第一代币名称从0地址转让至所述持有者区块链地址;
395.响应于至少携带有第二代币名称的对非同质化代币的处理触发操作,根据所述第二代币名称和所述映射关系表,执行对所述非同质化代币的处理操作。
396.与本技术第二实施例提供的代币合约部署方法相对应的,本技术实施例提供一种计算机可读存储介质,存储有代币合约部署方法的程序,该程序被处理器运行,执行下述步骤:
397.响应于对非同质化代币所属的代币合约的修改操作,在所述代币合约中,创建映射关系表,所述映射关系表用于存储代币名称和与所述代币名称对应的代币编号的映射关系;
398.根据所述代币合约中所需参数包括代币编号的各第一事件和各第一函数,在所述代币合约中对应增加所需参数包括代币名称的功能相同的各第二事件和各第二函数,以获得更新后的代币合约;
399.在与区块链网络通信连接的情况下,将所述更新后的代币合约部署在所述区块链网络中;
400.其中,所述第二函数中包括查表语句和调用语句,所述查表语句用于根据所述映射关系表,查找代币名称对应的代币编号,所述调用语句用于根据查找得到的代币编号,调
用与所述第二函数功能相同的所述第一函数。
401.需要说明的是,对于本技术实施例提供的装置、电子设备及计算机可读存储介质的详细描述可以参考对本技术实施例中对方法的相关描述,这里不再赘述。
402.本技术虽然以较佳实施例公开如上,但其并不是用来限定本技术,任何本领域技术人员在不脱离本技术的精神和范围内,都可以做出可能的变动和修改,因此本技术的保护范围应当以本技术权利要求所界定的范围为准。
403.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
404.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
405.1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他属性的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储介质或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
406.2、本领域技术人员应明白,本技术的实施例可提供为方法、系统或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
407.本技术虽然以较佳实施例公开如上,但其并不是用来限定本技术,任何本领域技术人员在不脱离本技术的精神和范围内,都可以做出可能的变动和修改,因此本技术的保护范围应当以本技术权利要求所界定的范围为准。