`

获取全局变量值

 
阅读更多
// SPDX-License-Identifier: MIT
pragma solidity >= 0.6.0;

import "hardhat/console.sol";

contract Vault {
  bool public locked;
  bytes32 private password;
  uint256 private data;

  constructor(bytes32 _password) public {
    locked = true;
    password = _password;
    data = 9;
  }

  function unlock(bytes32 _password) public {
    if (password == _password) {
      locked = false;
    }
  }
}


const { expect } = require("chai");
const { ethers } = require("hardhat");

contractName = "Vault";

describe(contractName, function () {
  it("test ", async function () {
    const Contract = await ethers.getContractFactory(contractName);
    //parseBytes32String:bytes32 to string
    //formatBytes32String:string to bytes32
    const contract = await Contract.deploy(ethers.utils.formatBytes32String("123456"));
    console.log("lock:",await contract.locked());

    let password = await ethers.provider.getStorageAt(contract.address, 1)
    await contract.unlock(password);
    console.log("password:",password);
    console.log("lock:",await contract.locked());
    let data = await ethers.provider.getStorageAt(contract.address, 2)
    console.log("data:",data);
  });
});



map的获取
// SPDX-License-Identifier: MIT
pragma solidity >= 0.6.0;

contract UserPass {
    //slot 0
    mapping(uint => uint) private users;

    constructor() {
    }

    function addUser(uint addr, uint i) public {
        users[addr] = i;
    }

}


const { expect } = require("chai");
const { ethers,waffle } = require("hardhat");
const { mainModule } = require("process");


contractName = "UserPass";

function addrAdd(_from, _num){
    let b = ethers.BigNumber.from(_from).add(_num)
    return ethers.utils.hexValue(b);
  }

describe(contractName, function () {
  it("test ", async function () {
    const Contract = await ethers.getContractFactory(contractName);

    const userpass = await Contract.deploy();
    let user1, user2;
    [user1, user2] = await ethers.getSigners();
    
    await userpass.connect(user1).addUser(1,16);
    await userpass.connect(user1).addUser(2,17);
    hash = await ethers.utils.keccak256(await ethers.utils.defaultAbiCoder.encode(["uint", "uint"], [1,0]))
    console.log("pass1:",await ethers.provider.getStorageAt(userpass.address, hash));
    hash = await ethers.utils.keccak256(await ethers.utils.defaultAbiCoder.encode(["uint", "uint"], [2,0]))
    console.log("pass2",await ethers.provider.getStorageAt(userpass.address, hash));




  });
});
分享到:
评论

相关推荐

    labview功能性全局变量的详细使用

    读操作用于获取当前全局变量的值,写操作则用于更新其值。注意,因为全局变量的共享特性,多个VI可能同时读写,所以需谨慎处理并发访问,以防止数据冲突。 5. **多线程环境下的数据争抢** 在多线程环境中,局部...

    易语言源码易语言汇编设置全局变量源码.rar

    通常需要知道全局变量在内存中的地址,这可以通过易语言的“获取内存地址”命令获取。 4. 结合易语言:在汇编代码前后,使用易语言的语句进行上下文转换,确保程序的正常运行。 总结,易语言源码的编写和汇编的...

    shujuchuanshu.rar_labview_labview全局变量_全局变量

    在一个VI中改变全局变量的值,其他VI可以实时获取到这个变化,实现数据的同步。 5. **注意事项**:虽然全局变量提供了方便的数据共享,但过度依赖全局变量可能会导致程序结构混乱,增加调试难度。因此,推荐在设计...

    SQL 一些全局变量 时间函数

    全局变量是在整个会话范围内保持其值的变量,不同于局部变量,它们只在声明它们的代码块内有效。全局变量的生命周期从会话开始到结束,期间的所有查询和存储过程都能访问这些变量。在MySQL中,全局变量通常以`@`符号...

    全局变量在对话框中的使用

    第二个实例涉及定义全局变量来传递对话框控件的值。这通常用于对话框关闭后,将用户输入的信息传递给其他函数或类。例如: 1. 在头文件中声明全局变量: ```cpp extern int gIALOGValue; ``` 2. 在对话框的OK按钮...

    C语言实现s-function源码,含全局变量

    Simulink提供了一些内置的调试工具,如设置断点、查看变量值等,帮助开发者调试S-Function。 在提供的压缩包`s_function_c_global`中,可能包含了实现上述功能的C源文件和相关的头文件。通过编译和链接这些源代码...

    sql全局变量

    SQL全局变量 SQL全局变量是Transact-SQL语言中的一种变量类型,它们是SQL Server系统内部使用的...全局变量提供了一种方便的方式来获取SQL Server的系统信息和配置设定值,从而帮助开发者更好地理解和优化数据库系统。

    线程间通信的定义及全局变量的方法

    全局变量对于进程内的所有线程都是可见的,因此任何一个线程都可以通过读写全局变量来与其它线程共享数据。 然而,使用全局变量进行线程间通信存在一个关键问题,那就是资源竞争。当多个线程几乎同时尝试修改同一个...

    labview值信号和全局变量的合用

    1. **数据缓存**:如果一个VI需要定期从网络或硬件获取数据,而这些操作速度较慢,可以先将数据存储在全局变量中,然后通过值信号快速传递给其他VI。 2. **状态机**:在状态机设计中,全局变量可以用来存储当前状态...

    php 超全局变量

    - 示例:获取名为 `HOME` 的环境变量值可以通过 `$_ENV['HOME']`。 - 作用:用于访问操作系统环境变量。 8. **$_REQUEST**: 包含通过 HTTP GET 和 POST 方法以及 Cookie 传递过来的所有数据。 - 示例:获取名为 ...

    微信小程序全局变量改变监听的实现方法

    // 获取全局变量值,直接返回全部 return this.globalData; } }); } }); ``` 在这个例子中,我们创建了一个`data`对象,它会被监听以捕获任何变化。`set`方法用于设置新的值,同时调用`method`函数将新的值...

    逆向dll中的函数及通过函数api钩子获取dll中的全局或是const变量值

    逆向dll中的函数及通过函数api钩子获取dll中的全局或是const变量值

    易语言汇编设置全局变量源码

    获取全局变量score的地址 add eax, 50 ; 增加50到eax(即score的值) } ``` 在上面的汇编代码中,“mov”指令用于将[全局变量_score的地址]处的值加载到寄存器eax,然后“add”指令将50加到eax,最后这个结果会被...

    Android中用Application类实现全局变量

    接下来,我们可以在任何需要的地方通过调用`getApplication()`方法获取到`Application`实例,进而访问我们定义的全局变量。这里给出一个示例Activity,演示如何在Activity中使用这些全局变量: ```java package ...

    C#将全局变量的字符串变为函数参数

    `:定义了一个全局变量 `str`,其值为 `"hyh"`。 - `public string hyh = "Hello World";`:定义了一个公有的字段 `hyh`,初始值为 `"Hello World"`。 - `private void button1_Click(object sender, EventArgs e)...

    twig模板获取全局变量的方法

    本文将详细介绍如何在Twig模板中获取全局变量,以及一些基本的Twig语法。 首先,让我们了解Twig模板的基本语法: 1. **输出变量**:使用`{{ }}`来输出变量的值。例如,如果有一个变量`id`,我们可以在模板中写作`{...

    提升效率之循环全局变量Global (1).pdf

    `QueryRetrunReasonNotZR()`方法中,每次循环都通过`^BLC("RFR", rfr)`重新获取全局变量的值。这种方式在循环内重复执行了全局变量的查找,效率通常低于引用全局变量的方式。 为了验证这些方法的性能差异,`...

    SQLserver全局变量

    SQL Server全局变量是数据库管理系统中预定义的特殊变量,它们存储有关系统状态和环境的信息。这些变量可以在查询中被查询,以获取关于SQL Server实例的实时信息,例如系统活动、错误处理、用户信息以及资源使用情况...

    使用脚本设置全局环境变量

    `setx`命令允许我们将变量名和值设定为系统的环境变量,例如: ```cmd setx MY_VAR "my_value" /M ``` 这里的`/M`参数表示设置的是系统环境变量,而不是用户环境变量。 在Unix或Linux系统中,全局环境变量的设置则...

    sql全局变量说明_sql_server

    在SQL Server中,全局变量是一种特殊的系统变量,它们的值在整个服务器范围内都是可见的,不受特定会话的影响。这些变量提供了关于SQL Server实例运行状态和最近执行操作的信息。以下是对标题和描述中提到的几个关键...

Global site tag (gtag.js) - Google Analytics