1. 程式人生 > >以太坊開發教程(二) 利用truffle發布寵物商店 DAPP 到 以太坊測試環境Ropsten

以太坊開發教程(二) 利用truffle發布寵物商店 DAPP 到 以太坊測試環境Ropsten

ini 寵物 func on() append localhost -c success compile

1.環境安裝

1) node安裝

設置鏡像地址:  curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
下載安裝
yum -y install nodejs
node -v 查看版本:
技術分享圖片

2)安裝truffle

$npm install -g truffle

3)安裝python

npm install python

2.創建truffle項目

我的項目安裝在 /usr/local下、

所以分別執行下面三個命令: 1)cd /usr/local

   2)mkdir pet_test //創建項目文件地址

3) truffle 幫我們打包了一些常用的經典示例,放在box中, 這個是我們用到的pet_shop的地址:https://truffleframework.com/boxes/pet-shop

    執行: truffle unbox pet-shop

這個命令會自動幫我們初始化 truffle init,然後創建前端的文件夾。

介紹一下truffle的文件架構:

  • contracts/ : 智能合約文件存在這裏,後綴.sol (solidity)

  • migrations/ : 部署腳本

  • test/ : 測試腳本

  • truffle.js :truffle的配置文件

編寫智能合約:

在 contracts/ 目錄下創建 Adoption.sol 文件,內容如下:

pragma solidity ^0.4.17;

contract Adoption {
address[16] public adopters;

//adopting a pet
function adopt(uint petId) public returns (uint) {
require(petId >= 0 && petId <= 15);
adopters[petId] = msg.sender;
return petId;
}

//retrieve the adopters
function getAdopters() public view returns (address[16]) {
return adopters;
}
}

編寫前端:

用戶界面(UI)是前端工作,這裏用的javascript。主要文件是app.js,存在目錄 /src/js/app.js 中。文件內容如下:

App = {
web3Provider: null,
contracts: {},

init: function() {
// Load pets.
$.getJSON(‘../pets.json‘, function(data) {
var petsRow = $(‘#petsRow‘);
var petTemplate = $(‘#petTemplate‘);

for (i = 0; i < data.length; i ++) {
petTemplate.find(‘.panel-title‘).text(data[i].name);
petTemplate.find(‘img‘).attr(‘src‘, data[i].picture);
petTemplate.find(‘.pet-breed‘).text(data[i].breed);
petTemplate.find(‘.pet-age‘).text(data[i].age);
petTemplate.find(‘.pet-location‘).text(data[i].location);
petTemplate.find(‘.btn-adopt‘).attr(‘data-id‘, data[i].id);

petsRow.append(petTemplate.html());
}
});

return App.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();
},

initContract: function() {
$.getJSON(‘Adoption.json‘, function(data) {
// Get the necessary contract artifact file and instantiate it with truffle-contract
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();
},

bindEvents: function() {
$(document).on(‘click‘, ‘.btn-adopt‘, App.handleAdopt);
},

markAdopted: function(adopters, account) {
var adoptionInstance;

App.contracts.Adoption.deployed().then(function(instance) {
adoptionInstance = instance;

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: 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;

// Execute adopt as a transaction by sending account
return adoptionInstance.adopt(petId, {from: account});
}).then(function(result) {
return App.markAdopted();
}).catch(function(err) {
console.log(err.message);
});
});
}

};

$(function() {
$(window).load(function() {
App.init();
});
});

到這裏 整個項目的前端和合約部分都完成了。下面講述如何編譯部署合約和如何啟動前端應用。


編譯部署合約

1.首先執行 truffle compile

以太坊開發教程(二) 利用truffle發布寵物商店 DAPP 到 以太坊測試環境Ropsten