当前位置:首页>区块链文章>区块链技术>基于以太坊ERC721区块链的商品防伪与可信溯源

基于以太坊ERC721区块链的商品防伪与可信溯源

由于以第三方交易平台为中心的担保交易难以保障担保资金的安全,该文基于以太坊ERC721区块链技术设计了商品链交易结构来存储商品交易数据,通过追溯商品制造商和拥有者的交易数据来执行假货鉴别。保障交易数据不可篡改的同时,提高了假货整别的查询效率。本文设计了去中心化的担保机制,基于智能合约ERC721标准化接口,将商品以非同质化Token的形式发布,由于ERC721的性质,每当Token被请求交易的时候都将广播此条交易信息。由此实现资金转移流程的不可篡改性,从而保障资金安全。

关键词:区块链

蔡明 云峰 阿娜呼 谷仕威 戴梓轩

摘要:由于以第三方交易平台为中心的担保交易难以保障担保资金的安全,该文基于以太坊ERC721区块链技术设计了商品链交易结构来存储商品交易数据,通过追溯商品制造商和拥有者的交易数据来执行假货鉴别。保障交易数据不可篡改的同时,提高了假货整别的查询效率。本文设计了去中心化的担保机制,基于智能合约ERC721标准化接口,将商品以非同质化Token的形式发布,由于ERC721的性质,每当Token被请求交易的时候都将广播此条交易信息。由此实现资金转移流程的不可篡改性,从而保障资金安全。

关键词:区块链;商品溯源;以太坊

中图分类号:TP3        文献标识码:A

文章编号:1009-3044(2019)25-0246-04

1 区块链的背景及现状

当下社会,以淘宝京东为首的电商交易平台以网络购物足不出户便能买到各种商场买得到甚至买不到的东西而飞速发展,从最初的不信任网络交易到现在把网购当作家常便饭,电商极大程度的方便了我们的生活和工作。网购的群体似乎全体默认似的相信这些电商平台,放心地把资金交给第三方平台作为和商家的媒介,确认收货后由第三方将资金转交给商家,然而事实上这些商家也做得不错,不然也无法赢得网民的信任。但是这终究是中心化的交易模式,一旦这些平台出现信誉问题或者内部漏洞,损失将无法避免。

同时存在的一个问题,商品的真假更加难以辨识,在实体店看得到摸得着的商品尚且大多数人都难以辨别真假,透过屏幕和网络所进行的交易就更加困难。经调查显示,近半用户都将商品质量差,为仿制品作为对交易不满意原因的首选。受限于中心化,各平台对商品整合能力有限,对商品真假的辨别以及来源的辨别都存在较大的问题,同时一旦中心数据库遭到攻击,数据就存在着被篡改删除的风险。这是中心化存在的另一大问题。

仅仅优化销售中心对于解决根本问题是杯水车薪,最好的方法就是去中心化,去中心化的交易环境可以提供无须信任的交易模式,可以保障交易数据以及商品来源不可篡改,不需要第三方交易平台即可实现真正的信任。同时购买商品的顾客可以通过区块链追根溯源找到商品来源,辨别真假。

2008年中本聪最先提出了比特币的机制,用于存储比特币的区块链技术开始在各个领域被广泛地应用,同样,在产品追根溯源方面也有着重要的作用。可追溯数据是假货鉴别的基础,然而现行传统的供应链可篡改、不透明、节点之间不同步等特性使得数据的可追溯十分困难。而区块链技术不同于传统的技术,区块链技术凭借工作量证明的共识机制,通过节点之间的算力竞争保证分布式数据的同步,去中心化使得数据不可篡改,账簿公开,商品的来源更好追溯。

目前有一种常见防伪方式,就是“易损标签法”,通过简单的刮刮卡印刷,印上商品唯一查询编号,用户通过刮开操作,破损标签后获得编号,通过查询编号或者商品的真伪,系统通过查询次数记录反馈给消费者,如果某个标签被查询过,可以视为商品被打开过或者是假货。

另一种防伪方式便是二维码防伪,二维码防伪采用二维码加密技术给产品做标识,将二维码印刷或标贴于产品包装上,用户只需通过指定的二维码防伪系统或手机软件进行解码检验,即可验证产品真伪,获得详尽的信息。缺点在于二维码本身并不能防伪,需要有一个手机APP应用端和企业商品信息数据库才能实现防伪的效果。原理是通过给每个商品分配一个唯一的二维码,并运用不可复制的材料印刷技术来确保二维码不能够被复制,消费者在购买商品时通过下载手机APP查询二维码,核对商品信息、制造企业等信息即可辨别真伪,增加了防伪成本,而且仍然存在造假。

2016年沃尔玛和清华大学合作,利用区块链技术对食品进行追踪,销售给中国消费者,使沃尔玛在全世界范围内对食品进行追踪溯源,快速解决食品不安全问题。目前通过区块链溯源的包括中国的猪肉和美国的包装产品,这是目前最大型的区块链技术的应用实例。目前一些国家已将区块链技术应用于房屋产权证明领域。

2 区块链相关技术及原理分析

2.1 区块链性质

2.1.1 去中心化

区块链技术是比特币和加密传输的基础技术,中心问题是解决没有值得信任的中心化结点的情况下,网絡中各个小节点如何实现相互信任,达成共识。区块链被形象地称为分布式账本,原因就在于每一个节点都有着完全相同的所有交易数据,而且没有中心节点,也就意味着所有的节点都是中心节点,改变其中一个节点的数据并不会被其他节点所承认,除非掌握一半以上的节点,但这是一项庞大的工程,几乎不可能完成。因此,区块链去中心化的技术很好地解决了信任问题,那就是用算法取代中心。由于不存在中心节点,交易的成本也大幅度降低,促进了交易率的提高。

2.1.2 匿名性

在交易过程中,所有的交易信息都被完全公开,任何用户都可以查询所有的交易数据,交易信息完全透明,但是出于隐私要求,用户账户信息并不会被公开,区块链技术有对应的加密算法来完成,将账户信息加以保护,未经允许无法访问。区块链技术的共识机制保证交易记录真实有效,需要多个节点达成共识才能确保交易记录真实有效。后续的合约机制当达到特定条件自动执行合约条款。区块链技术中,顾名思义,数据以块的形式进行存储,块块相连,互相有一定的纽带关系,下一个区块保存着上一块的哈希值,一旦从中删除或修改某一块,都会造成不可兼容,因此区块链技术有着很好的不可篡改性。

2.1.3 不可篡改

区块链技术的核心是当前的链上所有结点共同维护链上存储的交易信息,交易的基础是密码学而不是信任,任何用户想要交易都不需要经过第三方直接交易。从技术角度来讲,所有完成的交易记录都会串成一条主链,包含若干区块,每个区块保存交易信息、前一块的哈希散列值、随机数,交易信息是交易双方的交易额、数字签名等;前一块的哈希值目的是形成块之间相互联系的纽带,保证不可篡改性;随机数是交易的核心,所有矿工节点,共同计算这个随机数,计算成功的就拥有这一块的记账权,并在网络中进行广播,完成交易。从本质上通俗地说,区块链是一个巨型的所有用户都参与进去的数据库,所有参与其中的矿工对节点信息进行验证来找到正确的区块进行交易存储。这个链式结构随着时间的增加而不断延长,每个参与的节点都有一份完整的备份记录,这些都是自动完成的。通过区块链技术,当用户想验证历史交易信息或商品溯源时,只要通过基于数据结构的密码学运算就能找到对应的区块,验证产品真伪,验证来源是否可靠。

2.2 区块链运行机制

2.2.1 智能合约

一种以信息化方式传播、验证或者执行合约的计算机协议,能够允许在没有第三方的情况下进行可信的交易,并且这些交易是无法被追踪、同时也是不可逆的。通过 POW 实现了 分布式一致性,同时使用 UTXO 模型 存储和管理底层数据结构,实现了去中心化的分布式账本,并且在一定程度上实现了『可编程』这一特点,但是它的脚本机制非常简单,只是一个基于堆栈式的脚本语言。

2.2.2 非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。使用最广泛的是RSA算法,Elgamal是另一种常用的非对称加密算法。

2.3 ERC721技术

ERC721是针对不可置换Token的智能合约标准接口,(non-fungile tokens)不可置换Token简称NFTs,操作标准API的实现方法。在ERC721标准下生成的token(在本项目中每写入一件商品相当于生成一个token)具有不可置换,独一无二的特性,由于这种特性,在每次token交易发生时,系统都会广播该token交易的双方以及是哪条token被交易。该特性非常有利于交易追溯。

3 基于区块链的商品交易链设计

3.1 商品链体系模型

本章主要说明基于区块链的商品交易模式和假货识别系统的核心技术,并同時建立相应模型。该商品链主要涉及的环节有:商品生产环节,商品销售环节,二手交易环节。主要的关键技术:基于ERC721的真伪识别功能,交易担保。致力于如何完成可追溯源头的真假鉴别,去中心化的担保交易。 商品的真伪识别主要分为两个方面来实现,第一方面为商品的追根溯源,当你查询一件商品的来源时,可以逆着商品链,查询到这个商品的各级供货商,也就是这件商品的整个供货渠道,然后继续追溯的话可以追溯到这件商品的生产源头,以及该商品各级原材料的源头,来确保该商品本质上的安全可靠。第二方面是商品的归属性查询,由于是基于ERC721产生的商品token都具有唯一性,所以该token每次的交易记录都会被系统广播,被所有用户见证交易,所以可以查询到token 的完整流通路径,可通过此被见证的路径验证其真伪,如果卖家不在该token流通路径尾端,则可判定为该商品为假。

担保交易主要通过区块链的去中心化的特性来实现,先编写智能合约,然后将所有的交易流程通过智能合约的ERC721标准接口来写入区块链中,这样就实现了去中心化的交易担保,可以有效地防止第三方篡改交易内容。

3.2 基于区块链的假货鉴别

商品的真伪识别主要分为两个方面来实现,第一方面为商品的追根溯源,当你查询一件商品的来源时,可以逆着商品链,查询到这个商品的各级供货商,以及该商品各级原材料的源头。在ERC721标准下,每次商品token被交易,系统都会广播交易信息,所以用户还可以通过自己商品的独一无二的token来查询广播日志来查询该商品的流通记录,由于所有广播都是所有用户共同见证的,所以该广播日志也具有不可篡改的性质。这样就形成了交易链及token交易日志双查询的双保险机制,保证了用户查询商品真伪的可靠性。第二方面是商品的归属性查询,因为该商品一直在该商品链上流通,如果你查询到商品归属权现在不在你的卖家哪里,但他仍出售这件商品,则可判定为该商品为假。因为该技术涉及追溯查询的效率,应该对该商品链的结构进行优化。

3.2.1 比特币交易结构

比特币系统是没有余额的概念的,它使用的是UTXO模型(Unspent Transaction Outputs,未使用过的交易输出),我们在交易过程中经常说的钱包余额,实际上是一个钱包地址的UTXO集合。所以,在比特币网络中,存储比特币余额的是交易输出,准确点说就是未使用过的交易输出,而每一笔交易的输入实际上引用的是上一笔交易的输出。下图是比特币系统中交易输入输出的过程:

由于比特币比特币对账户地址和交易地址都做了索引,所以上述操作可以快速地执行,但是在假货鉴别的背景下,要频繁的通过商品id来查询交易记录,将商品变成比特币后,比特币的utxo结构并不能提供快速的查询操作。由于缺少索引,所以要想完成查询操作,就要对所有区块进行遍历操作,这明显是不现实的。所以为了能满足我们高频查询的要求,我们要对比特币交易结构进行一定的改进。

3.2.2 商品链交易结构

(1)交易块:每发生一笔交易,买方就会创建一个交易块来记录交易数据。交易块主要由块数据(Block Data)和交易流数据(Tx Stream Data)两部分组成。块数据用于记录交易块的属性数据,例如该块记录的是哪件商品(Product ID)、由哪一个用户产生(Owner Address)、交易块的创建时间(Create Time)等;交易流数据用于记录与交易直接相关的数据,例如该商品的上一拥有者的账户地址(Up Owner Address)、下一拥有者的账户地址(Down Owner Address)、交易金额(Price)等。

(2)商品链:在一件商品完整的生命周期中,每被交易一次,就会产生一个交易块,把一件商品的所有交易块按照它的产生顺序链接起来,就是一条商品链。由于该商品链记录了前后交易的信息,所以该商品链类似于数据结构中的双链表结构,可以快速方便的追溯生产商的信息,同时也能向尾部追加交易信息。

该商品链保留了比特币交易链的通过交易地址查询交易信息的功能的同时,还可已通过商品的id快速高效的查找出该商品所在链,进而查询出该商品的所有交易方。

块数据和商品交易流的数据在追寻数据来源和商品所有权是有着至关重要的作用。将商品链通过双链表和数组两种数据结构储存,在查询时无论是随机查询还是根据某个交易块来查询其他交易块,查询的效率都很高。通过该商品链结合比特币交易结构的特点和本身的id索引。就可以通过商品id和交易地址快速的定位交易区块,进而就可进行整条链的交易数据查询。通过这种特殊的结构,就能很高效的在海量商品交易信息中获取到目标商品的所有交易信息,进而提高假货查询的效率。

3.3 担保交易

本交易体系采用智能合约的形式来代替传统的第三方平台担保。我们的优势在于,我们可以将担保交易的仲裁结果与结算规则写入区块链中,使其获得不可篡改的特性,这种特性可以使担保交易的可靠性和安全性大大提高。

3.3.1 担保交易双方

在我们的商品链中,主要分为两类用户,一类为交易用户,一类为商品制造商。交易用户可执行除了商品制造的所有操作,包括:定价、付款、发货时申请 token、确认收货等操作。而商品制造商的操作有:注册商品(只有被注册过的商品才能被交易)

3.3.2 担保交易流程

担保交易通过买家付款的操作来激活执行,买家付款的金额暂存在智能合约的合约账户中进行担保,只有符合仲裁和结算的规则时,才会发生资金的转移,将资金付款给卖家。这样去信任性的担保更为安全,可以有效避免人为的恶意操作。

在卖家发货时,会生成一个随机的token,该token会和商品一起发送给买家,该token的用途有如下几条:1.匿名销售功能,买家可以通过token来验证商品的真伪,不需要通过卖家的id和地址,所以不会暴露卖家的身份。2. 防止非法用户销售商品。在申請 token 时,智能合约会判断当前商品所有权是否归属于当前申请人。由于只有商品的当前拥有者才可申请 token,而非法用户不具有该身份,导致其无法申请 token。由于缺少正确的 token,买方就可在交易初期识别非法商贩,节省交易成本。

在买方确认收货时,智能合约会进行如下操作:(1)验证token,判断商品归属权是否为当前卖家。(2)验证制造商,核实商品来源是否属实合法。(3)更新交易信息,转移商品归属权。至此,交易完成,如果所有步骤符合智能合约规定,暂存到合约账户的金额将会打款给卖家。

3.3.3 担保交易的仲裁结算模型

模型主要需要解决的问题是交易双方在发生纠纷时如何进行仲裁和结算的问题。仲裁操作在买家收货的时候触发,首先点时器判断收货是否超时未执行,若超时后买家未操作,则把在合约账户的钱转入卖家账户。如果在期限内进行收货操作,则合约执行假货鉴别的流程,如果鉴定结果为假,则把钱退回买家账户中,如果鉴定结果为真,则把钱汇入卖家账户中,视为交易成功。

4 区块链可信溯源解决方案的设计与实现

在现有区块链的基础上,本项目基于以太坊智能合约, 实现商品可信溯源,在服务端运用SpringMVC,实现商品溯源查询,前端运用Javascript通过HTML展示所查询的结果,智能合约则使用以太坊自己的语言Solidify 将每一件商品信息和ID存在以太坊区块链上。

4.1 开发环境

Windows 10

Geth v1.8.23-

solidity ^0.4.0

4.2 准备工作

(1)安装Ethereum钱包

(2)Geth安装,安装完成后执行 geth help 查看geth的用法

4.3 初始化以太坊

(1)在本地新建genesis.json文件,通过控制台Geth命令初始化创始区块

geth init genesis.json

(2)启动以太坊

geth –rpc –rpcapi personal,db,eth,net,web3 –networkid 666666 –rpccorsdomain ”http://remix.ethereum.org” console

(3)创建钱包,一种是在Ethereum图形界面创建,一种是通过Geth在控制台输入personal.newAccount()创建

(4)解锁当前账户,使私链上的账户之间可以交易,通过Geth输入

personal.unlockAccount(eth.accounts[0])

(5)开始挖矿操作,保证数据存在每一个区块链结点。

miner.start(1)

4.4 部署智能合约

以太坊官方推荐的智能合约开发语言为Solidify,目前尝试Solidify编程最好的方式是使用Remix。Remix是基于浏览器的Solidify IDE,它集成了Solidify编译器、运行环境,以及调试和发布工具。使用浏览器打开网站https://remix.ethereum.org/,即可编写智能合约代码。

(1)编写智能合约代码

function register(address addr, string  username, string password) public {

}

(2)点击Compile标签页的Details,然后找到web3deploy将写好的合约部署到本地私链上。

var addorsearchContract = ;

var addorsearch = addorsearchContract.new(

{

from: web3.eth.accounts[0],

data:

gas: ‘4700000’

}, function (e, contract){

console.log(e, contract);

if (typeof contract.address !== ‘undefined’) {

console.log(’Contract mined! address: ‘ + contract.address + ‘ transactionHash: ‘ + contract.transactionHash);

}

})

(3)将RemixIDE生产的代码拷贝到geth控制台(注意:挖矿不能停),按下回车键运行就可以部署合约了。合约部署成功会有提示,

Contract mined! Address:0x9d77720ad98139952b33ff7de812957af811b09f

4.5 Java开发

使用maven管理 利用web3j库进行开发

org.web3j

core

3.2.0

4.6 服务端开发

使用SpringMVC在Web端实现查询注册功能

4.6.1 追溯产品的制造商

根据伴随该商品的唯一ID,拥有查询权限查询方通过前端可以追溯到商品链链首来查询该商品的信息。

输入:productID,name

输出:companyInfo

4.6.2 判断查询方是否有权限查询商品的制造商

鉴别假货要通过追溯商品的制造信息和商品的所有权信息来判断商品的销售信息是否属实。追溯商品制造商时,部分用户可能会隐藏商品的来源。为了保护用户的隐私,商品拥有者才有权限查询商品制造商的信息。

输入:商品唯一ID 和 商品品牌

输出:查询方是否有权限。

4.6.3 追溯商品的所有权

根据该商品的商品链,拥有查询权限查询方可以追溯到商品链链尾来查询该商品的所有权。

4.6.4 通过商品token追溯商品的交易流通记录

根据商品注册时根据ERC721标准产生的商品唯一token,該token拥有者可查询改商品的所有交易记录。

输入:商品token和用户id

输出:该token交易记录

4.6.5 生产方和交易方

用户的身份信息以合约UserContract的方式来实现。生产方注册时需要填写company字段,而交易方则无需填写此字段。

4.6.6 担保交易流程

商品交易的相关操作以BlockContract交易块的形式管理。交易块由块数据和交易流数据两部分组成。块数据包含了交易块的基本属性,交易流数据包含了交易相关的数据。商品交易状态有OnSale(销售中),OffSale(未销售)和Abort(废弃)。商品交易前,生产方需要注册其生产的商品。

生产商完成商品信息的注册后,此商品的商品链就被创建完成,便可以交易了。交易中,卖方需要对其商品定价,并将商品的交易状态改为OnSale。

买方付款时,所付金额不能低于卖方定价,否则交易失败。若买方成功付款,将其金额暂存到智能合约中进行担保。只有交易正常结束后,担保资金才会支付给卖方。

买方付完款后,卖方需发货,在发货时会随机生成一个独一无二的token。

4.6.7 仲裁和结算

买方收到商品和token后,便可以确认收货。为了防止买方不主动发起确认收货,而影响正常交易的完成,在买方收货后,会触发定时器,若在规定时间买方未确认收货,智能能合约中的担保资金会因超时转至卖方。

部分代码:

@Controller

public class UserController {

@RequestMapping(”login”)

@ResponseBody

public boolean login(HttpServletRequest request, HttpServletResponse response) throws Exception {

}

5 总结

本文主要以区块链技术和供应链为研究背景,基于以太坊区块链技术设计了可追溯供应链和去中心化的交易体系。提出了一种基于ERC721区块链技术的去中心化供应链交易体系,将每一个商品赋予一个非同质化的token,将供应链交易所产生的交易数据存储于区块链中,同时该token广播交易日志的存在,可双重保障交易数据的可追湖性和不可篡改性,在此基础上通过对商品制造商和拥有者的追溯和追踪实现了假货鉴别。同时,本交易体系使用智能合的代替了传统第三方交易平台来进行交易担保,该去信任化机制更可地保护了交易资金的安全。

参考文献:

[1] 陈西蒙. 基于区块链的供应链交易和假货鉴别的关键技术研究[D].华南理工大学,2018.

[2] 邓伟. 商业银行视阈下区块链技术的应用分析[D].首都经济贸易大学,2017.

[3] 郭珊珊. 供应链的可信溯源查询在区块链上的实现[D].大连海事大学,2017.

【通联编辑:代影】

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
区块链技术区块链推广

实盘中在vnpy多策略多交易对交易

2021-11-14 8:55:21

区块链技术

如何通过币安链发行自己QB代币?并写出具体代码

2023-3-4 9:51:33

重要说明

本站资源大多来自网络,如有侵犯你的权益请联系管理员 区块链Bi站  或给邮箱发送邮件834379394@qq.com 我们会第一时间进行审核删除。 站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!请在下载24小时内删除!


如果你遇到支付完成,找不到下载链接,或者不能下载,或者解压失败,先不要忙,加客服主的QQ:834379394 (客服有可能有事情或者在睡觉不能及时的回复您,QQ留言后,请耐心等待即可!)

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索