使用viem与链上智能合约进行交互

这篇具有很好参考价值的文章主要介绍了使用viem与链上智能合约进行交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

viem是一个由paradigm出品的ethers.js的替代品,相比后者,viem具有更小的软件包和更佳的性能,目前已经被sushiswap、mint.fun等项目采用,由于超高的性能,viem将来一定会成为ethers.js的一大竞争者,由于在CSDN还没有相关文章介绍,因此笔者就简要介绍一下如何利用viem与链上合约进行交互。

viem,区块链开发,智能合约,ethereum,区块链,javascript

viem,区块链开发,智能合约,ethereum,区块链,javascript

交互

本文以调用goerli上的WETH合约为例进行讲解

读合约

在ethers.js 5.0中,我们想要利用自己的rpc url来创建新的provider会采用ethers.providers.JsonRpcProvider()的方式,而在viem中,会采用下面的方式创建新的provider:

import { createPublicClient, http } from 'viem'
import { goerli } from 'viem/chains'

const client = createPublicClient({
  chain: goerli,
  transport: http('https://rpc.ankr.com/eth_goerli')
})

特别的,如果不想使用自己的rpc,transport可以省略为transport: http()

在ethers.js中,合约的abi可以直接使用human readable ABI,对于开发者来说,可以方便的直接从solidity代码中复制合约声明直接使用。而目前的viem暂时不支持human readable ABI,因此需要在与脚本文件相同文件夹下新建一个abi.js或者abi.ts文件,并在其中放入以下代码:

export const generalContract = {
    address: '0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6',  // goerli 上WETH的合约地址
    abi: []  // 这里放入目标合约的ABI
    }

然后在主文件中引用该文件:

// javascript
import { generalContract } from './abi.js';
// typescript
import { generalContract } from './abi';

假如要检查某地址的WETH余额,则采用如下方式进行调用:

const balanceOf = await client.readContract({
        ...generalContract,
        functionName: 'balanceOf',
        args: ['your address here'],
    });
    console.log('Balance of:', balanceOf);

其他读合约方法与此相同,如果函数没有参数的话,args项可以省略。

写合约

写入合约需要有钱包,首先需要创建钱包对象,采用以下方式创建钱包对象:

const walletClient = createWalletClient({
  transport: custom(window.ethereum)
})

const [address] = await walletClient.getAddresses()
const account = getAccount(address)

创建合约对象的方式与读合约中的方式相同,调用合约使用以下方式

const request = await client.simulateContract({
  ...generalContract,
  functionName: 'withdraw',
  amount,
})
const supply = await walletClient.writeContract(request)

至此我们便完成了使用viem读合约以及写合约文章来源地址https://www.toymoban.com/news/detail-779707.html

到了这里,关于使用viem与链上智能合约进行交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 揭秘区块链的奥秘:链上智能如何诊断加密生态系统的健康状况

    作者:shelly@footprint.network 数据源:Wallet Profile 在加密市场中,波动是家常便饭。就拿 2022 年来说,像 Terra、Celsius 和 FTX 这样的主要项目相继崩盘,搞得市场一片狼藉。这些情况往往让人措手不及,直到出事才知道出了问题。 与其等到出事才应对,如果能够持续地诊断加密生

    2024年02月02日
    浏览(49)
  • 【区块链技术开发】 Solidity使用Truffle Box工具实现预构建模板、自动化部署、创建智能合约示例代码

    专栏:区块链技术开发 Truffle Box是一个开发工具,为Truffle生态系统中的开发人员提供了预构建

    2023年04月16日
    浏览(70)
  • 区块链智能合约开发学习

    最近正在肝区块链知识学习,入手学习智能合约的开发,由于网上资料实在是太少了,好不容易东拼西凑完成了智能合约的开发、编译、部署、web3js调用(网页页面)和web3j调用(java调用),赶紧趁热把重点提炼出来。 先上图,是我最近学习知识点的一个概括总结,此外还包

    2023年04月18日
    浏览(42)
  • Web3 处理智能合约部署到本地区块链,并在本地进行测试

    上文 Web3 在Truffle项目中编写出自己的第一个solidity智能合约我们演示了 在Truffle环境下写一个智能合约并编译的功能 编译出的文件夹中的这个JSON就非常重要了 我们就可以通过 它这个ABI链接到需要的智能合约程序上去 但这也仅仅是编译完了 我们的智能合约还没有部署到我们

    2024年02月13日
    浏览(44)
  • 区块链2——Solidity智能合约开发

    区块链 索引目录 智能合约是一种以代码形式编写的自动执行合约,它们运行在区块链上。这些合约定义了在特定条件下发生的事件以及相应的行为。 1.1 智能合约结构 版本声明(Version Declaration): 智能合约通常以声明版本开始,指定合约应该使用的Solidity编译器版本。例如

    2024年02月05日
    浏览(69)
  • 区块链java开发智能合约nf(部署第一个NFT智能合约)

    手把手教你区块链java开发智能合约nft-第二篇(部署第一个NFT智能合约) 刚搞区块链开发真的是太累了,自己摸石头过河,动不动就报错,网上搜索错误,一律看不出什么问题,或者报错的信息太少,问同事同事不鸟,问领导,领导也烦,无奈,对于英文不好的我,只能被迫

    2024年02月12日
    浏览(57)
  • 使用Golang Web3库进行区块链开发

    区块链作为一种分布式账本技术,在近年来取得了巨大的发展。而Golang作为一种高效、并发性强的编程语言,被广泛用于区块链开发中。在Golang中,我们可以使用Web3库来与以太坊或其他区块链网络进行交互。 Web3库是一个用于与区块链进行交互的工具库。它提供了一套API,用

    2024年02月07日
    浏览(54)
  • 华为区块链开发,处方流转合约Java代码示例

    https://wheart.cn/

    2024年02月03日
    浏览(42)
  • 蚂蚁区块链投票案例(二)---投票合约设计开发

    计划用三篇文章,一个月左右的时间来实现一个蚂蚁开放联盟链上的区块链投票案例,本文是系列第二篇。 蚂蚁区块链投票案例(一)—蚂蚁链简介 蚂蚁区块链投票案例(二)—投票合约设计开发 蚂蚁区块链投票案例(三)—Java调用部分实现(整理中) 本文将结合具体的投票案例

    2024年02月04日
    浏览(46)
  • 基础前端使用web3 进行区块链项目开发

    这篇文章不会些区块链的机制算法等一切,只是对前端开发者,如何快速上手进行区块链项目开发做一个简单的引导。 阅读本文之前,需要了解一些简单的区块链知识,能回答以下四个问题就可以阅读本文了。 1、区块链是什么? 2、区块链节点是什么? 3、钱包是什么? 4、

    2024年02月01日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包