前端请求智能合约的思路

从工作分工上来看,前端工程师完全可以把智能合约看做是一个后端工程师给你的接口,毕竟solidty的主要工作也是处理和返回数据的,和普通的后端工作内容相差不大,只不过代码是部署在区块链上的。

因为代码是部署在区块链上的,所以在发送请求时会与传统的请求有所不同,但本质是一样的,接下来我们要搞清楚以下三点,就能明白它的本质为什么是一样的:

1.什么是abi,我们为什么要用到它
2.为什么要借助第三方包,而不是直接请求服务器,它都有哪些作用
3.请求智能合约的原理是什么,区块是如何执行的

一.什么是abi,我们为什么要用到它

先看代码,因为我对ether比较熟悉,这里用ether做演示:

//区块链本质是由多个服务器跑相同的程序,存储相同的数据,然后不停地相互同步来形成的信任网络
//我们只需要链接其中一个,然后请求这个服务器即可,至于数据同步的事情不用我们处理

//provider我们称之为节点提供者(每个组成区块的服务器我们称之为节点),存储节点信息和地址信息
//我这里模拟的是DAPP的流程,节点和用户的相关信息存在window.ethereum中,可以直接获取
let provider = new ethers.providers.Web3Provider(window.ethereum)
//signer(签名者),该信息存在节点提供者中并自动与节点关联
let signer = provider.getSigner();
//这里将合约地址,abi,还有签名者之间做关联,生成一个合约对象,之后就可以调用合约对象的方法了
let contract= new ethers.Contract('合约地址', erc20abi, signer);
//这里调用了合约代币的转账方法
// ethers.utils.parseEther()是ether.js工具包中的一个方法,可以将数字字符串乘上10**16,没有精度损耗
let data = await contract.transfer("收币地址", ethers.utils.parseEther("1"))
			.catch(function(err) {
   
   
							console.log(err)
				})
//data是本次调用生成的链上数据,不是代码执行完后的返回值
console.log(data)
//监听data中的交易hash,来获取交易结果
let data2=await	provider.waitForTransaction(data.hash);
console.log(data2)

data返回值:

{
   
   
    "hash": "0xe632c016cea540b54ccde8343378e615174040fbaae68fce44ab1ea44a89a531",
    "type": 0,
    "accessList": null,
    "blockHash": null,
    "blockNumber": null,
    "transactionIndex": null,
    "confirmations": 0,
    "from": "0x173f8Ce8356dD214813f4874C316739F560D8022",
    "gasPrice": {
   
   
        "type": "BigNumber",
        "hex": "0x1ff973cafa8000"
    },
    "gasLimit": {
   
   
        "type": "BigNumber",
        "hex": "0x760e"
    },
    "to": "0x2c4eb3c76D7115E210Fadf3cBFe8E0a3d5b8448F",
    "value": {
   
   
        "type": "BigNumber",
        "hex": "0x00"
    },
    "nonce": 207,
    "data": "0xa9059cbb000000000000000000000000173f8ce8356dd214813f4874c316739f560d80220000000000000000000000000000000000000000000000000de0b6b3a7640000",
    "r": "0xd8c09aab22974fc057010152929fcb4b134a431c707c2f212f619f18297eb485",
    "s": "0x69f6e8d9f3581625797bc20cfdd2951ef225e5f24366d8f4128e8e6fdfd70316",
    "v": 2093,
    "creates": null,
    "chainId": 1029
}

data2返回值:

{
   
   
    "to": "0x2c4eb3c76D7115E210Fadf3cBFe8E0a3d5b8448F",
    "from": "0x173f8Ce8356dD214813f4874C316739F560D8022",
    "contractAddress": null,
    "transactionIndex": 0,
    "gasUsed": {
   
   
        "type": "BigNumber",
        "hex": "0x6a09"
    },
    "logsBloom": "0x04000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000008000000800000000000000000000100000000000000000000000020000000000000000000000010000000000080000010000000000000000000040000000000000000000000004000000000000000000000000000200000000000000000000000000400000000000000000000000000000000004000000002000000000001000000000000000000000000000000100000000000400000000000000000000000000000000000000000000000000100000000100000",
    "blockHash": "0x7c85a7911b5e9c8fb3bf40898167873e4beccd535407fdae3aea777246014936",
    "transactionHash": "0xe632c016cea540b54ccde8343378e615174040fbaae68fce44ab1ea44a89a531",
    "logs"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值