在当今的中国,网上购物已经成为了我们不可或缺的一部分,通过电商网站查看商品,下单购物,支付,付款到支付宝,买家收货确认后,货款自动打入卖家的账户,这些购物的体验多数人每天都可能发生。大家都知道,淘宝的背后是阿里巴巴这样的中心化机构操控,卖家在淘宝开C店,开天猫需要经过淘宝,要交押金,交维护费用,推广商品也是需要交费的,,羊毛自然出在羊身上,这些费用又会通过商品价格转移到消费者的身上,加大了顾客的负担。我们来看看通过区块链实现的去中心化的购物功能。下面我们先从淘宝购物流程进行分析,再来设计一下去中心化购物流程的实现。

淘宝购物核心流程分析

我们通过在淘宝一次购物来分析一下整个购物流程,以及相关的角色,包括买家,卖家,以及淘宝,我们把淘宝认为是一个中心化的组织。

我们先看看买家主要的操作流程,如下图所示:

买家查看商品,选好商品下订单购物,支付商品的费用,由淘宝进行保管。

买家线下收货,确认收货后,通过通知淘宝,完成购物。

再看看卖家销售的流程,如下图所示:

卖家接收订单后,线下发货,通知淘宝,更新订单状态,待客户收货后,接收货款。

淘宝承担的工作,如下图所示:

网上购物时,电商作为中心化的组织,主要为买家提供付款保管作用。待买家确认收货后,将的付款,发送给卖家。其实承担的工作也比较简单,但却是电商网站最核心的功能。

去中心化购物应用设计

由上面的分析,我们不难发现,电商购物网站是一个中心化应用,其主要的功能为买卖双方提供一个付款监管的,让买卖双方都能按照购物规则完成购物和销售。通过电商平台进行商品的销售,因为有了一个中心化的组织,使得我们网上购物有了一个保证,保证了我们资金安全和货品的安全,与此同时也增加了商品的费用。

那么我们有没有一种去中心化的购物网站,答案当然是有的,要不笔者也不会写这篇文章。基于以太坊区块链开发去中心化的购物应用,可以很好地解决我们遇到的问题,降低商品销售的成本,从而降低商品的价格。

区块链的特性公开透明,不可抵赖,不可篡改。运行在区块链上的智能合约,就行法律一样的程序代码,让我们得订立的条文,写到合约上,发布后不可篡改,这样的特性保证我们得资金更加的安全。

我们现在考虑使用以太坊的智能合约来实现电商网站所承担的职能:

  1. 买方下订单,支付后,合约对付款进行监管,买方不能再操控付款。

  2. 待买家收货确认后,把货款发送给卖方。

  3. 买卖交易通过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应用前端相似,本文就不多介绍。智能合约的部份代码作了简化,实际的业务场景可能会复杂很多,主要提供一个开发购物应用的思路,希望给读者启到抛转引玉的作用。

参考:以太坊官方文档。

欢迎加公众号一起交流。

以太坊区块链实现去中心化购物功能相关推荐

  1. 区块链的去中心化VS传统互联网的去中心化:技术与治理的双重困境

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 区块链的去中心化VS传统互联网的去中心化:技术与治理的双重困境11 主要观点: 1.传统互联网经典的去中心化项目BitT ...

  2. 基于Solana区块链的去中心化交易所Orca正式启动

    2月25日消息,基于 Solana 区块链的去中心化交易所 Orca 现已正式启动.Orca 自称是以人为本(而非程序化)的自动做市商(AMM)和聚合器.目前,非美国地区用户可开始交易 SOL.BTC ...

  3. 区块链要去中心化么?

    本文摘自< 深度探索区块链:Hyperledger技术与应用 >,原文发布在华章计算机. 区块链(Blockchain)技术自身仍然在飞速发展中,目前还缺乏统一的规范和标准.Wikiped ...

  4. 币图网以太坊开发实例_去中心化概念模型与架构设计

    IM 去中心化概念模型与架构设计 今天打算写写关于 IM 去中心化涉及的架构模型变化和设计思路,去中心化的概念就是说用户的访问不是集中在一个数据中心,这里的去中心是针对数据中心而言的. 站在这个角度而 ...

  5. 基于区块链的去中心化抗量子密钥管理系统

    摘要: 区块链技术在2008年被提出被称为比特币(我觉得应该是翻译为比特币应用了区块链技术),区块链技术是一种分布式的数据库.公钥基础设施PKI(Public Key Infrastructure)系 ...

  6. 区块链和去中心化的弱点

    想知道更多关于区块链技术知识,请百度[链客区块链技术问答社区] 链客,有问必答! 技术人员通常认为区块链是一种纯粹的.无损的产品.即使是那些抨击比特币的人,也会称赞区块链,仿佛这是种超越. 从某种程度 ...

  7. 基于区块链的去中心化存储(区块链存储)的工作流程

    引入 个人电脑上存储有限,而且如果硬盘损坏数据丢失的话,也不容易恢复.因此很多人愿意把数据上传到云盘里,也就是云存储.但是云存储是服务提供商控制的,比如阿里云,百度云等,我们称为中心化的存储 ,人们对 ...

  8. 报刊资料整理:区块链的去中心化是如何实现的?

    区块链的去中心化是如何实现的? 区块链的去中心化是如何实现的? 区块链的去中心化是如何实现的? 去中心化的定义 区块链如何实现去中心化? 1.解决身份问题 2.消息传递完整性 3.点对点通信 4.共识 ...

  9. python去中心化_EOS区块链dApp去中心化应用汇总

    EOS最近一直在区块链新闻中.它的主干网(公有链)发布了,人们仍然对它们持怀疑态度.在101Blockchain.com网站上,我们知道会有紧张的投资者.怀疑的分析家和像你一样好奇的读者.这就是为什么 ...

最新文章

  1. Hello World程序里居然有bug!
  2. HelloWorld 和相关设置
  3. 01数字基带信号及其频谱特性
  4. 读保护_GD32VF103之片上flash读、写、擦除
  5. ubuntu12.04 安装配置jdk1.7
  6. python从入门到精通-小白如何系统学习python,从入门到精通?
  7. SQL Server与Excel数据互导
  8. java quartz 教程_Quartz 教程
  9. matlab语言编程pdf下载地址,Matlab语言编程 pdf epub mobi txt 下载
  10. 阻滞增长模型求解_阻滞增长模型logistic模型.ppt
  11. Windows查看快捷键占用情况
  12. oracle判断数字为复数,oracle毛病(二) (转)
  13. AR涂涂乐⭐五、关于“4”的部分解决方案
  14. java手机号码格式验证
  15. 在kile中为stm32移植FreeRTOS
  16. 生成艺术or游戏?无限可能的体验#Wayfinder-探索这片土地的诗意
  17. 虚拟地址,虚拟地址空间, 交换分区
  18. bootstrap图片上传
  19. 网络7层协议,4层,5层?理清容易混淆的几个概念
  20. 基于计算机视觉的Android手机摄像头实现长度测量

热门文章

  1. 4K H.265和H.264
  2. 顶会论文分析:知识图谱增强语言模型或是未来的发展趋势!
  3. 君澜与桐乡乌镇黄金水岸大酒店签署委托管理协议
  4. 叶绿体基因组完成图重磅来袭!
  5. 如何使用Spark计算共同好友?
  6. Excel 是您最容易被忽视的设计工具 设计师对世界排名第一的电子表格工具的看法——如何构建信息图表、仪表板、演示文稿等
  7. 微信电脑版备份聊天记录踩坑记
  8. 用好.net SDK
  9. 数独游戏(1)之绘制九宫格,并初始化数据
  10. STM32单片机语音识别MP3播放器音乐播放器TF卡播放器