Eth Of Erc20 And Erc721

这篇具有很好参考价值的文章主要介绍了Eth Of Erc20 And Erc721。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Solidity常见关键字

  • public,可以修饰变量和函数, 被修饰的函数或变量可以被任何合约调用(或访问),默认的变量和函数使用该属性。
  • private,可以修饰变量和函数,被修饰者只能被当前合约内部的代码所调用(或访问),不能被外部合约调用或继承它的子合约调用(或访问)。
  • extermal,只能修饰函数,被修饰的函数可以被当前合约之外的合约所调用(或访问),不能被自己和继承它的合约调用(或访问)。
  • internal,可以修饰变量和函数,被修饰者可以被当前合约内部以及继承它的合约调用(或访问),但不能被外部合约调用(或访问)。
  • view,只能修饰函数,函数内部能够对外部变量进行读取操作,但是不能进行修改。
  • pure,只能修饰函数,函数内部不能对外部的变量进行读取和修改操作,它只能对传参进入的参数量进行读写操作。

ABI(Application Binary Interface):应用程序二进制接口

它的直观形式是一串Json字符串,Json里面有如下Key:

name: 字符串类型,对应的是当前项的名称。name只知道这个项的名称,究竟对于它是函数function还是uint8变量还是什么,并不清楚。
type: 字符串类型,标明当前项的项是什么类型(具体是一个函数还是一个变量)。常见的type有下面的取值
		1.function 函数
		2. construct 构造函数
		3. event 事件
		4. 变量类型,如: address, uint8, bool ...
constant: 布尔类型,代表当前项的操作结果是否会被写进区块链上,是则为true,否则为false。
stateMutability: 字符串类型。stateMutability有如下取值
		1. pure: 代表不会读和写区块链状态
		2. view: 代表会读区块链状态,但是不会改写区块链状态
		3. nonpayable: 代表会改写区块链状态,如转账transfer和授权approve这连个ERC20标准的函数就是可以用来改写区块链
payable: 布尔类型,代表当前的函数function是否可以接收ETH Token,可以则为true,否则为false
inputs: 其类型是Json数组,代表当前项入参信息,内部会把每个参数的名称及其所对应的类型列出。一般来说,input会跟随type是function或者事件event而含有值。inputs中的Json变量除了name和type外,还含有如下变量:
		1. Indexed,在Solidity代码事件event中,其入参有设置为Indexed关键字,此时Json中的这个变量对应的值为true,反之为false
		2. components: 该变量的类型是Json数组,当参数的typestruct结构类型是,该变量就会出现
outputs:  和inputs的含义类似,其类型也是Json数组,代表的是当前项的返回值,内部表达是返回值的名称和类型。inputs和outputs如果没有值,便默认是[]。
anonymous: 布尔类型,它和"标准的事件(Event)"的Indexed的设置有关,当为true的时候,在event中的入参即使是属于Indexed关键字的形式也不会保存到Topic中,为false则会。

找一个ABI看看

[
    {
        "inputs":[
            {
                "internalType":"address",
                "name":"_logic",
                "type":"address"
            },
            {
                "internalType":"bytes",
                "name":"_data",
                "type":"bytes"
            }
        ],
        "stateMutability":"payable",
        "type":"constructor"
    },
    {
        "anonymous":false,
        "inputs":[
            {
                "indexed":false,
                "internalType":"address",
                "name":"previousAdmin",
                "type":"address"
            },
            {
                "indexed":false,
                "internalType":"address",
                "name":"newAdmin",
                "type":"address"
            }
        ],
        "name":"AdminChanged",
        "type":"event"
    },
    {
        "anonymous":false,
        "inputs":[
            {
                "indexed":true,
                "internalType":"address",
                "name":"beacon",
                "type":"address"
            }
        ],
        "name":"BeaconUpgraded",
        "type":"event"
    },
    {
        "anonymous":false,
        "inputs":[
            {
                "indexed":true,
                "internalType":"address",
                "name":"implementation",
                "type":"address"
            }
        ],
        "name":"Upgraded",
        "type":"event"
    },
    {
        "stateMutability":"payable",
        "type":"fallback"
    },
    {
        "stateMutability":"payable",
        "type":"receive"
    }
]

合约标准

智能合约类型有很多,但是目前token合约标准主要是以 ERC20ERC721 为标准。
erc721 input,区块链

ERC20标准

ERC20标准中包括了成员变量函数事件
(1) 标准的成员变量

  • string public name,这是token的名称,全称,Ethereum
  • string public symbol,这是简称,如ETH
  • uint8 decimals,精度,即小数点的位数
  • uint256 totalSupply,总发行量

(2) 标准的函数和标准事件

interface IERC20 {
	// 这是token的名称,全称,Ethereum
	string public name;
	// 这是简称,如ETH
	string public symbol;
	// 精度,即小数点的位数
	uint8 decimals;
	// 总发行量
	uint256 totalSupply;

	/* 
		标准的函数
	*/
	// 查询totalSupply函数
    function totalSupply() external view returns (uint256);
    // 查询某用户Token余额函数
    function balanceOf(address account) external view returns (uint256);
    // 转账函数
    function transfer(address recipient, uint256 amount) external returns (bool);
    // 根据授权关系查询授权数量函数
    function allowance(address owner, address spender) external view returns (uint256);
    // 授权函数
    function approve(address spender, uint256 amount) external returns (bool);
    // 转账函数
    function transferFrom(address sender, address recipient, uint256 amount ) external returns (bool);
	/* 
		标准的事件
		// ERC20标准中,规定了在编写转账、授权函数代码时,必须在成功转账后触发事件。
	*/
	// Transfer在transfer和transferFrom函数内触发
    event Transfer(address indexed from, address indexed to, uint256 value);
    // 在成功调用approve函数后对应的一个事件
    event Approval(address indexed owner, address indexed spender, uint256 value );
}

以下是一个标准的ERC20合约

contract ERC20 {
    // 这是token的名称,全称,Ethereum
	string public name;
	// 这是简称,如ETH
	string public symbol;
	// 精度,即小数点的位数
	uint8 decimals;
	// 总发行量
	uint256 totalSupply;
	/* 
		标准的函数
	*/
	// 查询totalSupply函数
    function totalSupply() external view returns (uint256){};
    // 查询某用户Token余额函数
    function balanceOf(address account) external view returns (uint256){};
    // 转账函数
    function transfer(address recipient, uint256 amount) external returns (bool){};
    // 根据授权关系查询授权数量函数
    function allowance(address owner, address spender) external view returns (uint256){};
    // 授权函数
    function approve(address spender, uint256 amount) external returns (bool){};
    // 转账函数
    function transferFrom(address sender, address recipient, uint256 amount ) external returns (bool){};
	/* 
		标准的事件
		// ERC20标准中,规定了在编写转账、授权函数代码时,必须在成功转账后触发事件。
	*/
	// Transfer在transfer和transferFrom函数内触发
    event Transfer(address indexed from, address indexed to, uint256 value);
    // 在成功调用approve函数后对应的一个事件
    event Approval(address indexed owner, address indexed spender, uint256 value );
}

ERC721标准

ERC721标准中包括了成员变量函数事件。该合约主要提现一对一关系上。
(1) 成员变量
ERC721和ERC20成员变量基本一致,但是ERC721不需要decimal变量。
(2) 标准的函数和标准事件

	/* 
		标准的函数
	*/
	// 查询totalSupply函数
    function totalSupply() external view returns (uint256){};
    // 查询某用户Token余额函数
    function balanceOf(address account) external view returns (uint256){};
    // 转账函数
    function transfer(address recipient, uint256 amount) external returns (bool){};
    // 所有权查询
    function ownerOf(uint256 _tokenId) external view returns (uint256 balance){};
    // 授权函数
    function approve(address spender, uint256 amount) external returns (bool){};
    // 转账函数
    function transferFrom(address sender, address recipient, uint256 amount ) external returns (bool){};

    // 该标准主要的作用是用来检测当前智能合约实现了哪些接口,可以根据interfaceID来查询接口ID,存在返回true,否则返回false
    // 该标准函数会消耗gas,至少消耗30000Gas
    function supportsInterface(bytes4 _interfaceID) external view returns (bool){};

    // 可选实现函数
    function name() public view returns (string name);
    function symbol() public view returns (string symbol);
    function tokenOfowner(address _owner) external view returns(uin256 [] tokenIds);
    function tokenMetadata(uint256 _tokenId, string _preferredTransport) public view returns (string infoUrl);

ERC721和ERC20相比,主要是多了以下函数

function ownerOf(uint256 _tokenId) external view returns (uint256 balance){};

这个函数的功能是根据tokenId查询该token的所有者。

function tokenOfowner(address _owner) external view returns(uin256 [] tokenIds){};

这个函数的功能是根据某地址,查询该地址所拥有的tokenId

function tokenMetadata(uint256 _tokenId, string _preferredTransport) public view returns (string infoUrl){};

这个函数内部是自定义的字符串,就是一些基本信息。比如,这里写的是url,可以理解为一个NFT存储地链接。

function supportsInterface(bytes4 _interfaceID) external view returns (bool){};

标准主要的作用是用来检测当前智能合约实现了哪些接口,可以根据interfaceID来查询接口ID,存在返回true,否则返回false。该标准函数会消耗gas,至少消耗30000Gas。

以下是ERC721智能合约文章来源地址https://www.toymoban.com/news/detail-613685.html

contract ERC721 {
    // 这是token的名称,全称,Ethereum
	string public name;
	// 这是简称,如ETH
	string public symbol;
	// 精度,即小数点的位数
	uint8 decimals;
	// 总发行量
	uint256 totalSupply;
	/* 
		标准的函数
	*/
	// 查询totalSupply函数
    function totalSupply() external view returns (uint256){};
    // 查询某用户Token余额函数
    function balanceOf(address account) external view returns (uint256){};
    // 转账函数
    function transfer(address recipient, uint256 amount) external returns (bool){};
    // 所有权查询
    function ownerOf(uint256 _tokenId) external view returns (uint256 balance){};
    // 授权函数
    function approve(address spender, uint256 amount) external returns (bool){};
    // 转账函数
    function transferFrom(address sender, address recipient, uint256 amount ) external returns (bool){};

    // 该标准主要的作用是用来检测当前智能合约实现了哪些接口,可以根据interfaceID来查询接口ID,存在返回true,否则返回false
    // 该标准函数会消耗gas,至少消耗30000Gas
    function supportsInterface(bytes4 _interfaceID) external view returns (bool){};

    // 可选实现函数
    function name() public view returns (string name);
    function symbol() public view returns (string symbol);
    function tokenOfowner(address _owner) external view returns(uin256 [] tokenIds);
    function tokenMetadata(uint256 _tokenId, string _preferredTransport) public view returns (string infoUrl);

	/* 
		标准的事件
		// ERC721标准中,规定了在编写转账、授权函数代码时,必须在成功转账后触发事件。
	*/
	// Transfer在transfer和transferFrom函数内触发
    event Transfer(address indexed from, address indexed to, uint256 value);
    // 在成功调用approve函数后对应的一个事件
    event Approval(address indexed owner, address indexed spender, uint256 value );
}

到了这里,关于Eth Of Erc20 And Erc721的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Java智能合约工具包|Java调用智能合约|Java调用ERC20、ERC721、ERC1155合约

    Magician-ContractsTools是一个用于调用智能合约的工具包,你可以非常容易地在Java程序中调用智能合约进行查询和写入操作。 有三个内置的标准合约模板,分别是ERC20、ERC721和ERC1155,如果你需要调用这三个合约中的标准函数,可以帮助你非常快速地完成工作。除了内置的合同模板

    2024年02月11日
    浏览(41)
  • 以太坊数字资产的发行和流通:以太坊上的数字资产定义、ERC 20代币合约标准、ERC 20标准接口、ERC 721代币合约标准、

    以太坊设计的目标就是让各种数字资产能以智能合约的形式运行在以太坊虚拟机上。目前,众多智能合约中最广泛应用的是代币合约(Token Contract)。是负责管理账户以及其拥有的代币的智能合约,实质可以理解为一张账户地址和对应账户代币余额的映射表。 即:代币可以被

    2023年04月11日
    浏览(44)
  • 以太坊区块链ERC-721协议的实现(NFT代币标准)

    ERC-721是以太坊区块链上用于NFT(非同质化代币)的一个标准,是一种其他开发人员都遵守的模板或者格式,用于创建代表数字资产的独特代币,并且每个ERC-721代币都是独一无二的。使用统一的标准可以使合约代码变得更简单,复用性更强。ERC-721的出现促进了NFT的创建,并在

    2024年02月04日
    浏览(46)
  • ERC 20 优缺点,以及 eth 3 种转账方式

    定义统一的函数名:名称、发行量、转账函数、转账事件等 以便交易所、钱包进行集成 所有实现了这些函数的合约都是 ERC20Token ERC20 可以表示任何同质的可以交易的内容: 货币、股票、积分、债券、利息... 可以用数量来表示的内容 基本上可以ERC20 表示 以下是一个遇到很多次

    2024年01月19日
    浏览(37)
  • 区块链ERC20.json

    2024年02月11日
    浏览(32)
  • ERC721和加密收藏品(ERC721 & Crypto-Collectibles)

    唷!这里的气氛开始升温了…… 在这节课中,我们将更深入一些。 我们将讨论代币、ERC721标准和加密可收集资产。 换句话说,我们要做的是让你可以和朋友交换僵尸。 我们来谈谈代币。 如果你在以太坊领域呆过一段时间,你可能听过人们谈论代币——特别是 ERC20代币 。 以

    2024年03月11日
    浏览(33)
  • 【ERC-721与ERC-1155有什么区别?】

    无论您是加密爱好者还是第一次使用密码,您都可能听说过以太坊。它是最具影响力的开源区块链平台之一,用于创建智能合约、加密货币和去中心化应用程序。以太坊的智能合约改变了加密货币的世界,区块链技术现在渴望成为全球多个行业的标准。 大多数区块链发烧友已

    2024年02月01日
    浏览(37)
  • OpenZeppelin——ERC721

    ERC721是一个代币标准,ERC721官方简要解释是Non-Fungible Tokens,简写为NFT,多翻译为非同质化代币。 那怎么理解 非同质化 代币呢? 非同质化代表独一无二,以卡牌游戏为例,盲盒开出的英雄属性是随机生成,尽管职业相同,但每个英雄不一样,一个英雄对应一个TokenId,就是一个

    2024年02月22日
    浏览(44)
  • ERC721标准与加密猫

    2017 年 11 月 28 日,“加密猫”游戏出现在互联网上。这是基于以太坊的 ERC721 标准(不可互换通证)发行的加密数字宠物,每一只猫咪各不相同。 加密猫的正式中文名叫“谜恋猫”,游戏的官网称这些加密猫是“可收藏、可繁殖、讨人喜欢的”。用户可以用以太币换购这种猫

    2024年01月16日
    浏览(37)
  • Solidity合约标准----ERC721

    非同质化token,它依赖于ERC-165 参照官方提供的案例,直接部署到remix,自动下载依赖 https://docs.openzeppelin.com/contracts/4.x/erc721 部署成功后拥有以下功能 1. 设置待测试的4个账户 2. 铸造NFT 3. 查询NFT数量 4. 依据tokenid查询NFT属主 5.部分NFT委托授权第三者 6.查询NFT是否已被授权 7.由第

    2024年02月02日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包