热门标签
区块链公司 区块链原理 区块链系统 区块链项目开发 区块链应用开发 以太坊区块链开发 深圳区块链开发 区块链游戏开发 区块链开发技术 区块链项目 java区块链开发 区块链开发语言 fomo3d 区块链技术开发 vpay 区块链钱包 EOS区块链开发
小编推荐
大家都在关注
最新区块链百科
随机推荐

当前位置:主页 > 新闻资讯 > 区块链百科 > 区块链宠物软件开发源码

区块链宠物软件开发源码

2020-02-23 02:34:40 144 文章来源:汉全科技 作者:千灯

标签:

  区块链宠物游戏自上线以来,吸引了大量的客户,熟悉以太坊和智能合约的人都跃跃欲试,想要自己开发一个。以下是汉全科技为您带来的区块链宠物软件开发源码。(需要有HTML及JavaScript知识基础)

区块链宠物软件开发源码

  项目背景

  Pete有一个宠物店,有16只宠物,他想开发一个去中心化应用,让大家来领养宠物。

  在truffle box中,已经提供了pet-shop的网站部分的代码,我们只需要编写合约及交互部分。

  环境搭建:

  1、安装Node

  2、安装 Truffle :npm install -g truffle

  3、安装Ganache

  创建项目:

  1、建立项目目录并进入

  >mkdir pet-shop-tutorial

  >cd pet-shop-tutorial

  2、使用truffle unbox 创建项目

  >truffle unbox pet-shop

  Downloading...

  Unpacking...

  Setting up...

  Unbox successful. Sweet!

  Commands:

  Compile: truffle compile

  Migrate: truffle migrate

  Test contracts: truffle test

  Run dev server: npm run dev

  这一步需要等待一会

  也可以使用truffle init 来创建一个全新的项目。

  项目目录结构:

  contracts/ 智能合约的文件夹,所有的智能合约文件都放置在这里,里面包含一个重要的合约Migrations.sol

  migrations/ 用来处理部署(迁移)智能合约 ,迁移是一个额外特别的合约用来保存合约的变化。

  test/ 智能合约测试用例文件夹

  truffle.js/ 配置文件

  其他代码可以暂时不用管

  编写智能合约:智能合约承担着分布式应用的后台逻辑和存储。

  在contracts目录下,添加合约文件Adoption.sol

  pragma solidity ^0.4.17;

  contract Adoption {

  address[16] public adopters; // 保存领养者的地址

  // 领养宠物

  function adopt(uint petId) public returns (uint) {

  require(petId 》= 0 && petId 《= 15); // 确保id在数组长度内

  adopters[petId] = msg.sender; // 保存调用这地址

  return petId;

  }

  // 返回领养者

  function getAdopters() public view returns (address[16]) {

  return adopters;

  }

  }

  编译部署智能合约:

  Truffle集成了一个开发者控制台,可用来生成一个开发链用来测试和部署智能合约。

  编译:

  Solidity是编译型语言,需要把可读的Solidity代码编译为EVM字节码才能运行。

  dapp的根目录pet-shop-tutorial下,

  >truffle compile

  输出

  Compiling 。/contracts/Adoption.sol...

  Writing artifacts to./build/contracts

  部署:

  编译之后,就可以部署到区块链上。

  在migrations文件夹下已经有一个1_initial_migration.js部署脚本,用来部署Migrations.sol合约。

  Migrations.sol 用来确保不会部署相同的合约。

  现在我们来创建一个自己的部署脚本2_deploy_contracts.js

  var Adoption = artifacts.require(“Adoption”);

  module.exports = function(deployer) {

  deployer.deploy(Adoption);

  };

  在执行部署之前,需要确保有一个区块链运行, 可以使用

  Ganache来开启一个私链来进行开发测试,默认会在7545端口上运行一个开发链。

  Ganache 启动之后是这样:

区块链宠物软件开发源码

  接下来执行部署命令:

  > truffle migrate

  执行后,有一下类似的输出,

  Using network ‘develop’.

  Running migration: 1_initial_migration.js

  Deploying Migrations...

  ... 0x3076b7dac65afc44ec51508bf6f2b6894f833f0f9560ecad2d6d41ed98a4679f

  Migrations: 0x8cdaf0cd259887258bc13a92c0a6da92698644c0

  Saving successful migration to network...

  ... 0xd7bc86d31bee32fa3988f1c1eabce403a1b5d570340a3a9cdba53a472ee8c956

  Saving artifacts...

  Running migration: 2_deploy_contracts.js

  Deploying Adoption...

  ... 0x2c6ab4471c225b5473f2079ee42ca1356007e51d5bb57eb80bfeb406acc35cd4

  Adoption: 0x345ca3e014aaf5dca488057592ee47305d9b3e10

  Saving successful migration to network...

  ... 0xf36163615f41ef7ed8f4a8f192149a0bf633fe1a2398ce001bf44c43dc7bdda0

  Saving artifacts...

  在打开的Ganache里可以看到区块链状态的变化,现在产生了4个区块。

区块链宠物软件开发源码

  这时说明已经智能合约已经部署好了。

  测试:

  现在我们来测试一下智能合约,测试用例可以用 JavaScript or Solidity来编写,这里使用Solidity。

  在test目录下新建一个TestAdoption.sol,编写测试合约

  34pragma solidity ^0.4.17;

  import “truffle/Assert.sol”; // 引入的断言

  import “truffle/DeployedAddresses.sol”; // 用来获取被测试合约的地址

  import “。。/contracts/Adoption.sol”; // 被测试合约

  contract TestAdoption {

  Adoption adoption = Adoption(DeployedAddresses.Adoption());

  // 领养测试用例

  function testUserCanAdoptPet() public {

  uint returnedId = adoption.adopt(8);

  uint expected = 8;

  Assert.equal(returnedId, expected, “Adoption of pet ID 8 should be recorded.”);

  }

  // 宠物所有者测试用例

  function testGetAdopterAddressByPetId() public {

  // 期望领养者的地址就是本合约地址,因为交易是由测试合约发起交易,

  address expected = this;

  address adopter = adoption.adopters(8);

  Assert.equal(adopter, expected, “Owner of pet ID 8 should be recorded.”);

  }

  // 测试所有领养者

  function testGetAdopterAddressByPetIdInArray() public {

  // 领养者的地址就是本合约地址

  address expected = this;

  address[16] memory adopters = adoption.getAdopters();

  Assert.equal(adopters[8], expected, “Owner of pet ID 8 should be recorded.”);

  }

  }

  Assert.sol 及 DeployedAddresses.sol是Truffle框架提供,在test目录下并不提供truffle目录。

  TestAdoption合约中添加adopt的测试用例

  运行测试用例

  在终端中,执行

  1truffle test

  如果测试通过,则终端输出:

  Using network ‘develop’.

  Compiling 。/contracts/Adoption.sol...

  Compiling 。/test/TestAdoption.sol...

  Compiling truffle/Assert.sol...

  Compiling truffle/DeployedAddresses.sol...

  TestAdoption

  ✓ testUserCanAdoptPet (62ms)

  ✓ testGetAdopterAddressByPetId (53ms)

  ✓ testGetAdopterAddressByPetIdInArray (73ms)

  passing (554ms)

  创建用户接口和智能合约交互

  我们已经编写和部署及测试好了我们的合约,接下我们为合约编写UI,让合约真正可以用起来。

  在Truffle Box pet-shop里,已经包含了应用的前端代码,代码在src/文件夹下。

  在编辑器中打开src/js/app.js

  可以看到用来管理整个应用的App对象,init函数加载宠物信息,就初始化web3.

  web3是一个实现了与以太坊节点通信的库,我们利用web3来和合约进行交互。

  初始化web3

  接下来,我们来编辑app.js修改initWeb3():

  删除注释,修改为:

  initWeb3: function() {

  // Is there an injected web3 instance?

  if (typeof web3 !== ‘undefined’) {

  App.web3Provider = web3.currentProvider;

  } else {

  // If no injected web3 instance is detected, fall back to Ganache

  App.web3Provider = new Web3.providers.HttpProvider(‘http://localhost:7545’);

  }

  web3 = new Web3(App.web3Provider);

  return App.initContract();

  }

  代码中优先使用Mist 或 MetaMask提供的web3实例,如果没有则从本地环境创建一个。

  实例化合约

  使用truffle-contract会帮我们保存合约部署的信息,就不需要我们手动修改合约地址,修改initContract()代码如下:

  initContract: function() {

  // 加载Adoption.json,保存了Adoption的ABI(接口说明)信息及部署后的网络(地址)信息,它在编译合约的时候生成ABI,在部署的时候追加网络信息

  $.getJSON(‘Adoption.json’, function(data) {

  // 用Adoption.json数据创建一个可交互的TruffleContract合约实例。

  var AdoptionArtifact = data;

  App.contracts.Adoption = TruffleContract(AdoptionArtifact);

  // Set the provider for our contract

  App.contracts.Adoption.setProvider(App.web3Provider);

  // Use our contract to retrieve and mark the adopted pets

  return App.markAdopted();

  });

  return App.bindEvents();

  }

  处理领养

  修改markAdopted()代码:

  markAdopted: function(adopters, account) {

  var adoptionInstance;

  App.contracts.Adoption.deployed().then(function(instance) {

  adoptionInstance = instance;

  // 调用合约的getAdopters(), 用call读取信息不用消耗gas

  return adoptionInstance.getAdopters.call();

  }).then(function(adopters) {

  for (i = 0; i 《 adopters.length; i++) {

  if (adopters[i] !== ‘0x0000000000000000000000000000000000000000’) {

  $(‘.panel-pet’).eq(i).find(‘button’).text(‘Success’).attr(‘disabled’, true);

  }

  }

  }).catch(function(err) {

  console.log(err.message);

  });

  }

  修改handleAdopt()代码:

  handleAdopt: function(event) {

  event.preventDefault();

  var petId = parseInt($(event.target).data(‘id’));

  var adoptionInstance;

  // 获取用户账号

  web3.eth.getAccounts(function(error, accounts) {

  if (error) {

  console.log(error);

  }

  var account = accounts[0];

  App.contracts.Adoption.deployed().then(function(instance) {

  adoptionInstance = instance;

  // 发送交易领养宠物

  return adoptionInstance.adopt(petId, {from: account});

  }).then(function(result) {

  return App.markAdopted();

  }).catch(function(err) {

  console.log(err.message);

  });

  });

  }

  在浏览器中运行

  安装 MetaMask

  MetaMask 是一款插件形式的以太坊轻客户端,开发过程中使用MetaMask和我们的dapp进行交互是个很好的选择,通过此链接安装,安装完成后,浏览器工具条会显示一个小狐狸图标。

  配置钱包

  在接受隐私说明后,会出现页面如下:

区块链宠物软件开发源码

  这里我们通过还原一个Ganache为我们创建好的钱包,作为我们的开发测试钱包。点击页面的Import Existing DEN,输入Ganache显示的助记词。

  candy maple cake sugar pudding cream honey rich smooth crumble sweet treat

  然后自己想要的密码,点击OK。

  如图:

区块链宠物软件开发源码

  连接开发区块链网络

  默认连接的是以太坊主网(左上角显示),选择Custom RPC,添加一个网络:http://127.0.0.1:7545,点返回后,显示如下:

区块链宠物软件开发源码

  这是左上角显示为Private Network,账号是Ganache中默认的第一个账号。

  至此MetaMask的安装,配置已经完成。

  安装和配置lite-server

  接下来需要本地的web 服务器提供服务的访问, Truffle Box pet-shop里提供了一个lite-server可以直接使用,我们看看它是如何工作的。

  bs-config.json指示了lite-server的工作目录。

  {

  “server”: {

  “baseDir”: [“。/src”,。 “/build/contracts”]

  }

  }

  /src 是网站文件目录

  /build/contracts 是合约输出目录

  以此同时,在package.json文件的scripts中添加了dev命令:

  “scripts”: {

  “dev”: “lite-server”,

  “test”: “echo ”Error: no test specified“ && exit 1”

  },

  当运行npm run dev的时候,就会启动lite-server

  启动服务

  > npm run dev

  会自动打开浏览器显示我们的dapp,如本文的第一张图。

  现在领养一直宠物看看,当我们点击Adopt时,MetaMask会提示我们交易的确认,如图:

  点击Submit确认后,就可以看到成功领养了这次宠物。

  在MetaMask中,也可以看到交易的清单:

本文链接:https://www.a6shop.cn/wiki/1147.html

相关案例

汉全私有链开发
私有链开发
南方航空安联云系统开发
南方航空安联云系统开发
汉全联盟链开发
联盟链开发
选择汉全    品牌保证
01
雄厚公司资质
02
强大产品优势
03
敏锐行业前瞻
04
优质售后服务
汉全科技广东省高新技术企业证书
高新技术企业

汉全科技获得广东省高新技术企业,技术驱动商业创新

汉全科技广东股权交易中心证书
广州股权交易中心

汉全科技于2016年在广州股权交易中心成功挂牌,赢得广大企业事业的信赖

广州汉全信息科技有限公司团队照片
200+强大技术研发团队

团队核心成员来自实达集团,中国软件,唯品会,枫特红外等知名大型企业

广州汉全信息科技有限公司软件研发中心
13年+互联网行业技术沉淀

13年专注新商业程序研究和开发,万千用户品质见证

广州汉全信息科技有限公司软件知识产权证书
30项+软件著作权证书

获得30+互联网创新产品自主知识产权软件著作权证书

广州汉全信息科技有限公司资质荣誉
荣誉资质

汉全科技-中国区块链专业委员会创始会员单位(理事)

独家源码出售

各系统均提供专门的独家源码出售,方便客户自行系统开发。

产品更新迅速

每周均提供不同系统的功能点更新及优化,产品更新迅速,让您时刻立足行业前沿。

产品原生开发

产品原生开发,运行更快更流畅,让客户拥有更良好的体验。

专属定制开发

汉全可根据需求,为您专属定制开发,满足您全方位的产品需求。

方便二次开发

提供系统程序及二次开发文档,大大缩短开发进程,让您的系统快速上线。

全球3000+客户共同选择

产品功能稳定,获全球3000+家商业企业客户信赖,品质有保障。

设立战略研究院

设立专门的行业战略研究院,与行业内专家时刻保持密切联系,形成汉全独特的市场敏锐前瞻。

产品领先全国

领先全国,首家推出“汉全区块链商城”、“汉全区块链溯源”、等创新产品,并取得骄人的市场业绩。

国内最早开发搭建区块链商城系统

国内最早着手区块链商城系统平台的开发搭建,经过持续优化已达到系统稳定、功能持续全面更新中。

产品更新迅速

每周均提供不同系统的功能点更新及优化,产品更新迅速,让您时刻立足行业前沿。

强大的售后团队

强大的售前售后团队。配备专门的服务人员及技术人员1v1服务确保客户碰到的问题第一时间予以解决。

完美的技术支持

产品手册、操作教程、安装帮助等服务手册一应俱全,汉全为您提供完整的技术指导和行业支持,使您快速上手,轻松应对。

迅速响应服务

电话、QQ、工单、上门...汉全的售后人员随时为您提供迅速响应服务,及时应对客户提出的一切运营、技术难题。

全方位服务

QQ、电话等聊天工具全方位解答客户各种操作、技术难题,确保客户系统安全稳定,bug及时修复。

平台搭建部署全程指导

为各平台的搭建部署提供全程指导,即使创业小白,汉全也能助您实现平台快速上线和运营。

更多其他的服务

汉全将与您协同配合,提供优质的解决方案。持续跟进用户反馈,满足您的多方位其他需求。

0元免费试用
免费试用
6网合一网合一
全渠道营销
7*12小时售后×12小时
售后支持
100+营销功能
营销功能
200+团队支持
团队支持
30万商家选择万+
商家选择
广州汉全信息科技有限公司公众号
Title