0
点赞
收藏
分享

微信扫一扫

【跟乐乐学solidity】二 基础:交易操作

i奇异 2022-03-11 阅读 24

前言:合约账户与钱包账户的概念

在比特币合约中,是没有合约账户这个概念的,但在以太坊中则有合约账户。在以太坊中,合约账户之概念的存在代表着我们可以往合约账户存取代币,而不仅限于钱包账户与钱包账户之间的交易。
所以合约账户的地址,也就是合约地址本身。

一.地址变量

合约地址和钱包地址,在以太坊中是用’address’类型的变量来表示的
声明格式:address 自定义变量名 = 自定义地址;
例如:address myWalletAddress = 0xca35b7d915458ef540ade6068dfe2f44e8fa733c;
在这里插入图片描述

二.合约账户操作

前言中我们提到,合约账户也是可以进行存取操作的,那么我们该如何进行?

一.payable关键字介绍:转账代币至合约账户

如果我们要运行当前合约中,可以将代币转账至合约账户中,那么我们需要定义一个函数,且该函数必须被payable关键字修饰
函数体可以什么都不写。

    function play() public payable{
        
    }

二.balance变量介绍:获取合约账户余额

在以太合约中,有一个名为’balance'的成员变量,该变量名保存着当前合约账户中的代币数量。
需要注意的是,该成员变量是编译器本身就已经定义好的,我们无需再在代码中声明。
因为是成员变量,所以它的具体使用方式是:this.balance
在这里插入图片描述

三.获取该合约中,用户钱包的持币余额

此前我们说过,和合约账户对立的另一个账户,就是钱包账户,钱包可以和钱包之间转账。
同样的,钱包也可以持有某个合约的代币,那么,我们也可以获取某个钱包在当前合约中持有了多少代币
这需要调用address变量类型的balance方法来获取。
格式:address地址变量.balance;
在这里插入图片描述

四.实践合约转账、获取合约余额、获取钱包余额

这里我使用的是网页remix Ide在线工具。网址是:http://remix.hubwiz.com/#optimize=false&version=soljson-v0.4.16+commit.d7661dd9.js
以下操作依照该网页提供的界面为准。

首先,我们的代码是这样子的:

pragma solidity ^0.4.16;

contract transaction {

	//address myWalletAddress = 0xca35b7d915458ef540ade6068dfe2f44e8fa733c;

    function play() public payable{ // payable关键字来修饰某个函数,则代表该合约中,能够给合约账户转账。
        
    }

    function getBalance() public view returns(uint){
        return this.balance;//获取隐藏的成员变量'balance',它保存了合约的余额。
    }

	//获取该合约中某个钱包地址的持有该合约代币的数量。
    function getAccountOfWalletAddress(address walletAddress) public view returns(uint){
     //xca35b7d915458ef540ade6068dfe2f44e8fa733c;
     return walletAddress.balance;
    }
}

然后我们进行编译
在这里插入图片描述

编译后部署
在这里插入图片描述

部署之后,我们可以看到我们的合约函数,在交易金额一栏,输入我们要转给合约账户的代币数量,然后点击运行‘play’函数。
play函数一旦被执行,就会给合约账户中转入交易金额一栏中输入的代币数量。
在这里插入图片描述
执行后,可以看到我们的执行结果,给合约账户转入了’2000‘个。
在这里插入图片描述

然后我们运行getBalance函数,获取当前合约账户中有多少个代币。
在这里插入图片描述
至此,我们完成了向合约账户转账和查询合约账户余额,那么,我们如何指定钱包地址在该合约中的持币余额数量?
首先我们先看一下界面中当前账号一栏
在这里插入图片描述

是个地址对不对?这其实就是一个钱包地址,用于给我们测试用的,我们点击复制按钮,然后将其得到的钱包地址传入给getAccountOfWalletAddress函数并调用它,就能得到这个钱包在该合约中的持币余额了。
在这里插入图片描述
在这里插入图片描述
可以看到,有99999999999995854618个。

举报

相关推荐

0 条评论