开发Dapp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
开发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);
        });
    });
}

  

 

posted @   AlanTao  阅读(713)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示