10. 智能合约设计②
- 开始时间:
08:15 - 用原生
JavaScript开发,在转React,这行没有用Vue,一些边边角角会用到(后台呀、管理平台呀) - 视频进度:
00:30:00:和上一课的内容高度融合 - 找水龙头、使用测试链、上链操作
- 需要懂业务,需要能明白入职的行业,有相关经验,面试会问到
- The Graph 是一个去中心化的区块链数据索引 & 查询协议。
水龙头接收操作
- 用小狐狸的指定链的收货地址接收就行
- 线上网或测试网络地址都一样
- 地址一样的原因:地址来源于你的私钥,与网络无关
- 钱包地址并不是链生成给你的,而是由 助记词 → 私钥 → 公钥 → 地址 推导出来的。
- 不管你连的是主网、
Sepolia、Goerli、BSC、Polygon……只要助记词一样 → 你生成的地址永远一样。
用测试链互相转账
| 类型 | 是否可删除交易 | 谁控制链数据 |
|---|---|---|
| 主网 Ethereum Mainnet | ❌不可删除 | 全球节点共同维护 |
| 测试网 Sepolia / Holesky | ❌不可删除 | 同样由网络节点维护 |
| 本地链 Hardhat / Ganache / Anvil | ✔可删除 / 重写 | 你自己控制链状态 |
0x0000000000000000000000000000000000000000
- 空地址网址
- 相当于
JavaScript里面的undefined
| 名称 | 含义 |
|---|---|
Zero Address / 空地址 | 代表 不存在的地址 |
Burn Address | 常用于 销毁代币(不可取回) |
| 默认地址 | 合约中未设置就会返回这个地址 |
发往这个地址的币是不可取回的,相当于彻底销毁。
业务面试真题
请通过下方网址查看页面并回答问题:
- 每个子市场中的 "outcome(结果)" 是什么意思?
- "% chance(概率百分比)" 代表什么?如何得出或计算?
- "Yes" 和 "No" 代币的价格是如何形成的? “Bids” 与 “Asks” 有什么区别?
- "Yes" 与 "No" 代币的价格范围是多少?为什么要这样设定?
https://app.olab.xyz/detail?topicId=1&type=multi
佳哥笔记
Details
js
1.引入了V6 ether.js和jq(loading abi.json用的)
import InfoContractJson from "./InfoContract.json":
2.需要学习基本的ethers核心的core
let provider; 浏览器钱包操作权 拿过来了
let signer; 需要进行签名
let contract; new ether.Contract(合约地址InfoContractJson.network 5777 ,InfoContractJson,签名) 合约交互 contract.具体方法
let userAddress; 用户信息地址
3.接管钱包
provider = new ethers.BrowserProvider(window.ethereum);
signer = await provider.getSigner(); 获取账户地址 获取余额
4.不是测试网 主动帮你切过去
ethereum.request({
method: 'wallet_switchEthereumChain',
params: [{ chainId: targetChainId }],
});
如果用户的小狐狸 没有配置这个网络
await window.ethereum.request({
method: 'wallet_addEthereumChain',
params: [networkConfig],
});
'0x539': {
chainId: '0x539',
chainName: 'Local Testnet (Ganache)',
nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
rpcUrls: ['http://127.0.0.1:7545'],
blockExplorerUrls: [],
},
5.合约的信息都在abi里
部署了合约、链rpc正常启动的、钱包连上去 找到合约 合约地址
6.前端怎么和合约交互呢
contract = new ethers.Contract(contractAddress, contractABI, signer);
contract.合约方法
7.写合约
const tx = await contract.setInfo(name, age);
//等待数据上链 读取是不需要上链
const receipt = await tx.wait(具体4个块);
8.监听合约的事件呢
contract.on('Instructor', (name, age, event) => {})