以太坊区块链实现去中心化购物功能
在当今的中国,网上购物已经成为了我们不可或缺的一部分,通过电商网站查看商品,下单购物,支付,付款到支付宝,买家收货确认后,货款自动打入卖家的账户,这些购物的体验多数人每天都可能发生。大家都知道,淘宝的背后是阿里巴巴这样的中心化机构操控,卖家在淘宝开C店,开天猫需要经过淘宝,要交押金,交维护费用,推广商品也是需要交费的,,羊毛自然出在羊身上,这些费用又会通过商品价格转移到消费者的身上,加大了顾客的负担。我们来看看通过区块链实现的去中心化的购物功能。下面我们先从淘宝购物流程进行分析,再来设计一下去中心化购物流程的实现。
淘宝购物核心流程分析
我们通过在淘宝一次购物来分析一下整个购物流程,以及相关的角色,包括买家,卖家,以及淘宝,我们把淘宝认为是一个中心化的组织。
我们先看看买家主要的操作流程,如下图所示:
买家查看商品,选好商品下订单购物,支付商品的费用,由淘宝进行保管。
买家线下收货,确认收货后,通过通知淘宝,完成购物。
再看看卖家销售的流程,如下图所示:
卖家接收订单后,线下发货,通知淘宝,更新订单状态,待客户收货后,接收货款。
淘宝承担的工作,如下图所示:
网上购物时,电商作为中心化的组织,主要为买家提供付款保管作用。待买家确认收货后,将的付款,发送给卖家。其实承担的工作也比较简单,但却是电商网站最核心的功能。
去中心化购物应用设计
由上面的分析,我们不难发现,电商购物网站是一个中心化应用,其主要的功能为买卖双方提供一个付款监管的,让买卖双方都能按照购物规则完成购物和销售。通过电商平台进行商品的销售,因为有了一个中心化的组织,使得我们网上购物有了一个保证,保证了我们资金安全和货品的安全,与此同时也增加了商品的费用。
那么我们有没有一种去中心化的购物网站,答案当然是有的,要不笔者也不会写这篇文章。基于以太坊区块链开发去中心化的购物应用,可以很好地解决我们遇到的问题,降低商品销售的成本,从而降低商品的价格。
区块链的特性公开透明,不可抵赖,不可篡改。运行在区块链上的智能合约,就行法律一样的程序代码,让我们得订立的条文,写到合约上,发布后不可篡改,这样的特性保证我们得资金更加的安全。
我们现在考虑使用以太坊的智能合约来实现电商网站所承担的职能:
买方下订单,支付后,合约对付款进行监管,买方不能再操控付款。
待买家收货确认后,把货款发送给卖方。
买卖交易通过ether币作为货币。需要首先把商品的价格转换为以太币相应的价值。
智能合约的购物实现
pragma solidity^0.4.22; contractProductsales { uint public price; uint public amount ; address public seller; address public buyer; enum State { Created, Locked, Inactive} State public state; // 合约创建者为卖家 constructor(uint productPrice) publicpayable { seller = msg.sender; price =productPrice; } modifier condition(bool _condition) { require(_condition); _; } modifier onlyBuyer() { require( msg.sender == buyer, "只能允许买家访问." ); _; } modifier onlySeller() { require( msg.sender == seller, "只允许卖家访问." ); _; } modifier inState(State _state) { require( state == _state, "订单的状态不可操作." ); _; } event Aborted(); event PurchaseConfirmed(); event ItemReceived(); ///买家下单支付以太币后触发 function () public payable { require( msg.value == price, "请按商品价格付款!" ); emit PurchaseConfirmed(); buyer = msg.sender; state = State.Created; } /// 取消购物取回以太币 /// 只允许买家访问,只有卖家未发货之前可以访问. function abort() public onlyBuyer inState(State.Created) payable { emit Aborted(); state = State.Inactive; buyer.transfer(price); } /// 确认收货,发送货款到卖家 function confirmReceived() public onlyBuyer inState(State.Locked) payable { emit ItemReceived(); // 防止‘send’方法被再次调用,首先设置state。这一步非常重要。 state = State.Inactive; // 卖家提取货款 seller.transfer(address(this).balance); } |
合约主要实现了商品支付的监管,买家支付后费用先保存在合约账户,订单确认收货后,支付货款才发送给卖家,因为智能合约一经发布即不可修改,从而保证了合约按既定的购物规则执行,保证买卖双方的利益。
去中心化应用的前端与WEB应用前端相似,前端设计就忽略过了。
总结:本文介绍了去中心化购物应用的设计思路,使用以太坊智能合约实现,订单支付,货款保管,订单确认后支付货款给卖家,这些中心化组织承担的核心的功能。应用前端的设计和开发和web应用前端相似,本文就不多介绍。智能合约的部份代码作了简化,实际的业务场景可能会复杂很多,主要提供一个开发购物应用的思路,希望给读者启到抛转引玉的作用。
参考:以太坊官方文档。
欢迎加公众号一起交流。
以太坊区块链实现去中心化购物功能相关推荐
- 区块链的去中心化VS传统互联网的去中心化:技术与治理的双重困境
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 区块链的去中心化VS传统互联网的去中心化:技术与治理的双重困境11 主要观点: 1.传统互联网经典的去中心化项目BitT ...
- 基于Solana区块链的去中心化交易所Orca正式启动
2月25日消息,基于 Solana 区块链的去中心化交易所 Orca 现已正式启动.Orca 自称是以人为本(而非程序化)的自动做市商(AMM)和聚合器.目前,非美国地区用户可开始交易 SOL.BTC ...
- 区块链要去中心化么?
本文摘自< 深度探索区块链:Hyperledger技术与应用 >,原文发布在华章计算机. 区块链(Blockchain)技术自身仍然在飞速发展中,目前还缺乏统一的规范和标准.Wikiped ...
- 币图网以太坊开发实例_去中心化概念模型与架构设计
IM 去中心化概念模型与架构设计 今天打算写写关于 IM 去中心化涉及的架构模型变化和设计思路,去中心化的概念就是说用户的访问不是集中在一个数据中心,这里的去中心是针对数据中心而言的. 站在这个角度而 ...
- 基于区块链的去中心化抗量子密钥管理系统
摘要: 区块链技术在2008年被提出被称为比特币(我觉得应该是翻译为比特币应用了区块链技术),区块链技术是一种分布式的数据库.公钥基础设施PKI(Public Key Infrastructure)系 ...
- 区块链和去中心化的弱点
想知道更多关于区块链技术知识,请百度[链客区块链技术问答社区] 链客,有问必答! 技术人员通常认为区块链是一种纯粹的.无损的产品.即使是那些抨击比特币的人,也会称赞区块链,仿佛这是种超越. 从某种程度 ...
- 基于区块链的去中心化存储(区块链存储)的工作流程
引入 个人电脑上存储有限,而且如果硬盘损坏数据丢失的话,也不容易恢复.因此很多人愿意把数据上传到云盘里,也就是云存储.但是云存储是服务提供商控制的,比如阿里云,百度云等,我们称为中心化的存储 ,人们对 ...
- 报刊资料整理:区块链的去中心化是如何实现的?
区块链的去中心化是如何实现的? 区块链的去中心化是如何实现的? 区块链的去中心化是如何实现的? 去中心化的定义 区块链如何实现去中心化? 1.解决身份问题 2.消息传递完整性 3.点对点通信 4.共识 ...
- python去中心化_EOS区块链dApp去中心化应用汇总
EOS最近一直在区块链新闻中.它的主干网(公有链)发布了,人们仍然对它们持怀疑态度.在101Blockchain.com网站上,我们知道会有紧张的投资者.怀疑的分析家和像你一样好奇的读者.这就是为什么 ...
最新文章
- Hello World程序里居然有bug!
- HelloWorld 和相关设置
- 01数字基带信号及其频谱特性
- 读保护_GD32VF103之片上flash读、写、擦除
- ubuntu12.04 安装配置jdk1.7
- python从入门到精通-小白如何系统学习python,从入门到精通?
- SQL Server与Excel数据互导
- java quartz 教程_Quartz 教程
- matlab语言编程pdf下载地址,Matlab语言编程 pdf epub mobi txt 下载
- 阻滞增长模型求解_阻滞增长模型logistic模型.ppt
- Windows查看快捷键占用情况
- oracle判断数字为复数,oracle毛病(二) (转)
- AR涂涂乐⭐五、关于“4”的部分解决方案
- java手机号码格式验证
- 在kile中为stm32移植FreeRTOS
- 生成艺术or游戏?无限可能的体验#Wayfinder-探索这片土地的诗意
- 虚拟地址,虚拟地址空间, 交换分区
- bootstrap图片上传
- 网络7层协议,4层,5层?理清容易混淆的几个概念
- 基于计算机视觉的Android手机摄像头实现长度测量