- 浏览: 763678 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
在 Solidity 中,只有 storage 类型有动态数组。memory 类型的数组必须有固定长度,并且不允许使用push()来附加元素。
contract
result: 1,2,3
after remove: 0,2,3
len: 3
after pop: 3,2
arr2: 100
arrLen: 3
i: 1,2
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract MyArray { int256 [] intArr; int256 [3] intArr2; int256 [2][] intArr3; constructor(){ intArr3 = new int[2][](1);//2维数组,每个数组最多有2个元素,但只有一行 } function addInt(int256 i) public { intArr.push(i); intArr2[0] = 100; } function removeInt(uint index) public { delete intArr[index]; } function popInt(uint index) public { intArr[index] = intArr[intArr.length-1]; intArr.pop(); } function getIntArr() public view returns (int256[] memory){ return intArr; } function getIntArr2() public view returns (int256){ return intArr2[0]; } function getLength() public view returns(uint){ return intArr.length; } function newArr() public view returns(uint){ int[] memory a = new int[](3); uint len = a.length; return len; } function setFlagPair(uint index) public { intArr3[index][0] = 1; intArr3[index][1] = 2; //intArr3[1][0] = 3; } function getFlagPair(uint index) public view returns(int,int ) { return (intArr3[index][0],intArr3[index][1]); } }
const { expect } = require("chai"); const { ethers } = require("hardhat"); describe("contract", function () { it("test", async function () { const MyContract = await ethers.getContractFactory("MyArray"); const myContract = await MyContract.deploy(); await myContract.deployed(); await myContract.addInt(1) await myContract.addInt(2) await myContract.addInt(3) arr = await myContract.getIntArr(); console.log("result:",arr.toString()) await myContract.removeInt(0) arr = await myContract.getIntArr(); console.log("after remove:",arr.toString()); len = await myContract.getLength(); console.log("len:",len.toString()); await myContract.popInt(0) arr = await myContract.getIntArr(); console.log("after pop:",arr.toString()); arr2 = await myContract.getIntArr2(); console.log("arr2:",arr2.toString()); arrLen = await myContract.newArr(); console.log("arrLen:",arrLen.toString()); await myContract.setFlagPair(0); i= await myContract.getFlagPair(0); console.log("i:",i.toString()); }); });
contract
result: 1,2,3
after remove: 0,2,3
len: 3
after pop: 3,2
arr2: 100
arrLen: 3
i: 1,2
发表评论
-
TypeError:ethers_1.getAddress
2024-04-29 10:45 254package.json 添加:"@nomicfou ... -
solidity
2023-02-25 14:23 12一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
solidity
2023-02-25 14:23 11一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
solidity
2023-02-25 14:23 252一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
Address
2023-02-23 10:54 5// contracts/Box.sol // SPDX ... -
Address
2023-02-23 10:50 217// contracts/Box.sol // SPDX ... -
Beacon
2023-02-20 11:45 228Beacon a.Implementation地址并不存放在P ... -
UUPS
2023-02-17 16:16 262a.Proxy直接把所有的请求都通过delegatecall丢 ... -
Transparent
2023-02-16 15:44 211Transparent: a.如果Proxy合约发现自己被Pr ... -
string转bytes
2023-02-16 11:04 284const data = Buffer.from(''); ... -
hardhat命令
2023-02-13 09:58 3401.前置准备,运行一个新项目 mkdir my-project ... -
multicall
2023-01-31 20:11 200multicall的solidity调用与ethers.js调 ... -
检查是否是721
2023-01-31 15:18 157// SPDX-License-Identifier: M ... -
EVM操作码
2023-01-25 10:33 2982.栈和内存操作码 2.1 POP:取出栈顶元素 2.2 PU ... -
计算合约地址
2023-01-19 11:27 246EVM会根据发送者地址和nonce经过RLP编码后再进行kec ... -
标准修饰符
2023-01-18 17:03 1581.internal:类似c++中的protected,通过J ... -
ABI编码函数
2023-01-17 10:40 3061. abi.encode()returns(bytes):对 ... -
数据位置
2023-01-17 10:24 1791.函数参数包括返回的参数默认是memory 2.局部变量默认 ... -
随机数
2023-01-17 10:06 197https://www.paradigm.xyz/2023/0 ... -
extcodesize
2023-01-16 11:16 290extcodesize取出的byte code长度,若长度大于 ...
相关推荐
在早期版本的Solidity(0.4.x及之前),字符串被视作字节数组。这意味着在字符串之间进行拼接,你需要将字符串转换为字节,使用字节拼接的手段,然后再将结果转换回字符串。例如,可以通过`bytes`类型将字符串转换为...
Solidity提供了一系列的数据类型,包括基本类型(如uint、int、bool等)、地址类型(address)、固定大小的数组和动态数组、映射(mapping)以及合约类型。映射是一种非常特殊的类型,它允许键值对的存储,但不支持...
Solidity是用于编写智能合约的编程语言,特别是在以太坊区块链上运行。文档中提及的Solidity智能合约编写教程包含了一系列知识点,涵盖了从基础语法到高级特性,以及如何在以太坊平台上部署和管理智能合约。 ### ...
### Solidity开发基础 #### 知识点概览 1. **Solidity语言介绍与历史** 2. **Solidity语法特点** 3. **Solidity数据类型** 4. **Solidity函数定义** 5. **Solidity合约示例** 6. **Solidity中的变量声明** 7. **...
在Solidity教程中,我们将深入理解这种以太坊智能合约编程语言的基础——变量类型。Solidity是一种静态类型语言,这意味着每个变量必须在编译时指定其类型。它提供了丰富的基本类型,可以组合成复杂的结构。 首先,...
在区块链技术以及智能合约开发领域中,以太坊是一个广受关注的平台,而Solidity作为以太坊上最主要的编程语言,其安全性问题一直受到行业内外的广泛研究。本文档《以太坊Solidity未初始化存储指针安全风险浅析》将...
将此包添加到truffle-config.js ( Truffle docs )中的插件数组中 module . exports = { networks : { ... } , plugins : [ "solidity-coverage" ] } 跑步 truffle run coverage [command-options] 安全帽 从...
- `Collections.sol`:Collections可能是指集合类型的智能合约,它可能包含了数组、映射等数据结构,用于存储和管理多种类型的数据。 - `TestCRUD.sol`:与`TestCRUDMultiParameter.sol`相似,可能是一个基础的...
对solidity的编译环境、基础语法进行介绍,包括数据类型、状态变量与临时变量、block对象和msg对象、函数和函数修饰符、数组、mapping、自定义结构、事务控制与异常处理、自定义修饰符、storage与memory等进行全面...
3. **类型系统**:Solidity支持多种数据类型,如`uint`(无符号整数)、`int`(有符号整数)、`address`(账户地址)、`bool`(布尔值)等,以及固定大小的数组和动态数组。 4. **事件(Events)**:用于与前端应用...
Solidity库的集合,最初侧重于数组。 文档是从Natspec生成的。 快速开始 npm install --save cryptofin-solidity 在项目中使用 import "cryptofin-solidity/contracts/array-utils/AddressArrayUtils.sol"; contract...
在本课程中,我们将深入探讨如何使用Solidity这一专门用于以太坊区块链的编程语言来构建一个具有投票功能的智能合约。智能合约是区块链技术的核心组成部分,它允许在分布式网络上执行自动化的、可信的代码,无需任何...
在Solidity0.4.23版本的时候,有人在GitHub上列举了一些使用Solidity编写智能合约时常见的错误用法。虽然现在大家基本上都不会再写同样的问题代码,但是重新学习一下仍然有着借鉴意义。 1、tx.origin 错误用法:...
@ indexed-finance / multicall 用于静态多次调用的Solidity Contract和Typescript库。 MultiCall.sol合同在其构造函数内执行多个调用,并将结果作为ABI编码的字节数组返回。 当初始化代码作为eth_call操作发送到0...
总之,"serialize-solidity"是一个强大的工具,它填补了Solidity在处理复杂数据序列化上的空白,使得在以太坊智能合约中处理字符串数组变得更加便捷。对于任何涉及到大量字符串数据交换的以太坊项目,这个库都是一个...
solidity-bytesutil 用于处理字节的Solidity库。 快速开始 导入BytesUtil.sol并将此行添加到合同的开头 using BytesUtil for bytes; 职能 函数切片(字节bs,uint起始,uint长度) 将字节数组的一部分复制到新的...
Solidity 支持多种数据类型,如地址(用于存储其他账户的地址)、整数(int和uint)、布尔(bool)、字节串(string)、数组和映射(mapping)。此外,还有固定大小的字节数组(bytesN)和动态字节数组(bytes)。 ...
例如,避免循环和不必要的计算,使用映射(mapping)代替数组等。 **9. 静态分析工具** 为了检测潜在的安全问题和编码错误,开发人员可以使用Solhint和 Remix IDE 进行静态分析。这些工具可以提供编码规范和可能的...
- **删除元素**:Solidity不提供直接的删除元素操作,但可以通过重新分配数组来实现,这通常涉及创建一个新的数组并复制旧数组中需要保留的部分。 - **数组长度**:使用`length`属性获取数组的长度,如`uint length...
松露调试器 ... contracts -合同对象数组,具有以下属性: contractName名称 source -完整的密实度的源代码 sourcePath (可选)磁盘上Solidity文件的路径 ast -Solidity编译器的输出AST(新样式,不是lega