開發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); }); }); }