开发Dapp


开发Dapp流程

1.vue前端生成项目, 写好前端页面

2.安装truffle
npm install -g truffle
npm install -g ethereumjs-testrpc

3.下载ganache软件
https://www.trufflesuite.com/ganache#

4.在谷歌浏览器下载MetaMast小狐狸插件, 加入应项目中生成的私匙

4.在根目录初始化truffle
truffle init

5.配置truffle-config.js
module.exports = {
  contracts_build_directory: "./src/contract",	// 输入目录
  网络
  networks: {
    development: {
     host: "127.0.0.1",     // Localhost (default: none)
     port: 7545,            // Standard Ethereum port (default: none)
     network_id: "*",       // Any network (default: none)
    },
  }
};

6.migrations目录文件是钱包那边给的, contracts目录文件也是钱包那边给的sol文件

7.静态文件引入web3.js与, truffle-contract.js (用package.josn 也可以引入)

8.web3.js初始化, 在app.vue中
window.addEventListener('load', async () => {
	var web3Provider;
	if (window.ethereum) {
		web3Provider = window.ethereum;
		try {
			// 请求用户授权
			await window.ethereum.enable();
		} catch (error) {
			// 用户不授权时
			console.error('User denied account access');
		}
	} else if (window.web3) {
		// 老版 MetaMask Legacy dapp browsers...
		web3Provider = window.web3.currentProvider;
	} else {
		web3Provider = new Web3.providers.HttpProvider('http://localhost:7545');
	}
	window.web3 = new Web3(web3Provider);
	new Vue({
		i18n,
		router,
		store,
		render: h => h(App),
	}).$mount('#app');
});

9.启动truffle
truffle develop
compile
migrate

10. 如何使用, 如MetaCoin.js
import MetaCoin from '@/contract/MetaCoin.json';
let adoptionInstance = null;
const Contracts = {
	contract: null,

	// 初始化
	init() {
		return new Promise((resolve, reject) => {
			if (adoptionInstance) {
				resolve();
				return;
			}
			this.contract = TruffleContract(MetaCoin);
			this.contract.at('0x80fa9638580fD0c325e27FD84845Eb0957Da32C0');	// 项目生成合约地址
			this.contract.setProvider(window.web3.currentProvider);
			this.contract
				.deployed()
				.then(instance => {
					adoptionInstance = instance;
					resolve();
				})
				.catch(err => {
					reject(err);
				});
		});
	},
	// 投资买入, MetaCoin.json中的方法
	buy(address, params) {
		return new Promise((resolve, reject) => {
			adoptionInstance
				.buy(address, params)
				.then(res => {
					resolve(res);
				})
				.catch(err => {
					reject(err);
				});
		});
	},
};

export default Contracts;

11.获取帐户地址
/**
 * 获取帐号
 */
export function getAccounts() {
	return new Promise((resolve, reject) => {
		window.web3.eth.getAccounts((error, accounts) => {
			if (error) {
				console.log(error);
				reject(error);
			}
			var account = accounts[0];
			resolve(account);
		});
	});
}