`

获取全局变量值

 
阅读更多
// 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));




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

相关推荐

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

    提供两个全局变量在对话框中使用的实例,一个实例中定义了全局指针,可通过指针获取对话框编辑框控件的值;另一个实例中定义了一个全局变量,用于传递对话框控件的值,在VC++6.0中运行通过。

    python 解决flask uwsgi 获取不到全局变量的问题

    获取全局变量 严重怀疑是uwsgi的线程机制的问题,因为uwsgi是可以指定子进程的数目的,然而我设置子进程数目为1,之后,在处理函数1的时候是不能同时处理函数2的,怎么说,有点类似于javaweb中,uwsgi为了线程的...

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

    本文实例讲述了twig模板获取全局变量的方法。分享给大家供大家参考,具体如下: 简单介绍下,twig是一模板引擎,可以简化php的编写过程,提高效率。 而Symfony模板里,就自带了twig这一模板引擎。 twig的语法用的多...

    GlobalVariable - MetaTrader 5EA.zip

    本 EA 是演示全局变量的用例。此 EA 的任务: 在全局变量里保存计算结果, 并在新的初始化时获取全局变量值。

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

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

    从汇编程序中访问C程序变量

     ·使用LDR指令读取该全局变量的内存地址,通常该全局变量的内存地址值存放在  程序的数据缓冲池中。  ·根据该数据的类型,使用相应的LDR指令读取该全局变量的值;使用相应的STR  指令修改该全局变量的值。 ...

    Postman环境变量全局变量使用方法详解

    【登录接口】中会返回sign值,【学生金币充值接口】会则需要用到该sign值,因此把sign设置为环境或全局变量,便于其他接口调用。 1、请求登录接口,获取sign值: 2、把sign值添加至环境变量或者全局变量,如下: ...

    PHP与Web页面交互 -PHP获取表单信息.ppt

    首先需要定义下拉列表框的name属性值,然后应用$_POST全局变量进行获取。 * * PHP与Web页面交互 -----PHP 获取表单信息1 课程内容 获取文本框的值 获取文件域的值 获取复选框的值 PHP获取表单信息 在Web开发过程中,...

    Ajax获取回调函数无法赋值给全局变量的问题

    以上所述是小编给大家介绍的Ajax获取回调函数无法赋值给全局变量的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持! 您可能感兴趣的...

    浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法

    在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值,这时很有可能是因为你用的是ajax的异步调用async:true(默认情况),如: ...

    Android获取与设置系统环境变量的方法指南

      在Android源码的分析过程中经常会看到System.getenv(“xxx”)和getenv(“xxx”)以及Os.getenv(“xxx”)获取Android系统的环境变量值,本篇的重点不是分析代码的调用逻辑,而是讲解怎么在Android开发源码环境下...

    Linux C中多线程与volatile变量

    当某个线程修改了全局变量的值时,系统会立即更新该线程寄存器中对应的值,其他线程并不知道这个全局变量已经修改,可能还是从寄存器中获取这个变量的值,这个时候就会存在不一致的情况。 针对多线程访问共享变量...

    robotframework学习笔记之———变量.pdf

    推荐使⽤⼤写字母来表⽰全局变量(如 ${PATH} 或 ${TWO WORDS}), ⼩写字母来 表⽰局部变量(如 ${my var} 或 ${myVar})。 ⼀、获取列表项 使⽤下标语法 @{NAME}[index] 可以获取到列表变量中指定项的值, 其中 index 是...

    constants:您认为不需要更改的一种在应用程序中获取和设置值的灵活方法

    有用的:constants包导出单个全局变量,您可以使用该全局变量获取并设置很少更改的值。 通常,您应该对每个变量使用一次Constant方法,并应同时设置默认值,如下所示: var maxSpeed = Constant('maxSpeed', 100);...

    《Visual C++范例大全》随书光盘 第十二章

    实例282——调用DLL,获取其导出的全局变量值 实例283——创建Win32 DLL导出一个计算长方体表面积和体积的类 实例284——调用DLL,使用其导出类计算长方体的表面积和体积 实例286——创建MFC常规DLL,通过导出...

    LABVIEW参数断电保存.rar

    借用了范例里面的VI,目的是将需要频繁更改的参数(捆绑为数组)写入.txt文件,上电时读取.txt文件里的参数。读取的参数(数组)可索引行列获取每一个值。

    robotframework——变量文件.pdf

    变量的名字是不区分⼤⼩写的, 通常推荐⼤写字母⽤作全局变量和属性。 1.1 ⽰例1: 导⼊变量⽂件 myvar1.py MY_VAR = 'my value' my_name='test' VARIABLE = "An example string" ANOTHER_VARIABLE = "This is ...

    Postman设置cookie计算sign等.docx

    接口测试阶段,需要通过登录接口抓包,...(一)全局变量、环境变量 (二)Collections接口管理 (三)控制台日志查看 (四)Cookie、token动态设置 (五)Sign值自动计算 (六)统一设置cookie、token,统一计算sign

    PHP获取表单数据与HTML嵌入PHP脚本的实现

    php接受通过HTML表单提交的信息时,会将提交的数据保存在全局数组中,我们可以调用系统特定的自动全局变量数组来获取这些值。 常用的自动全局变量如下所示: 1、GET方式 功能:获取get方式提交的数据 格式:$_GET...

Global site tag (gtag.js) - Google Analytics