首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >块链上具有相同地址结构的2个映射的检验值

块链上具有相同地址结构的2个映射的检验值
EN

Stack Overflow用户
提问于 2021-10-15 08:40:21
回答 1查看 209关注 0票数 0

im是新的,具有块链和坚固性,我试图用相同的键在一个地址上检查2映射结果,假设我有以下代码

代码语言:javascript
复制
contract EventConfirmAccess{

struct eventStruct{
    string event_log_time;
    string event_name;
    string event_id;
    uint data_nik;
}
mapping(uint => eventStruct) public dictConfirmAccess;
uint[] public arrayOfData;

function loggingAccess(
    uint _nik, string memory _event_log_time,
    string memory _event_name, string memory _event_id,
    uint _data_nik
) public{
    dictConfirmAccess[_nik] = eventStruct(
      {
        event_log_time : _event_log_time,
        event_name : _event_name,
        event_id : _event_id,
        data_nik : _data_nik
      }
    );

    arrayOfData.push(_nik);
}
function checkData(uint _nik) view public returns(
        string memory ,string memory,
        string memory ,uint
    ){
        return (
            dictConfirmAccess[_nik].event_log_time,
            dictConfirmAccess[_nik].event_name,
            dictConfirmAccess[_nik].event_id,
            dictConfirmAccess[_nik].data_nik
        );
    }
 }

假设我在区块链中插入第一条数据:

  • loggingAccess(10001,"2020-10-11 08:10:00","CONFIRM_1","C_1",10001)

在此之后,我插入第二个数据:

  • loggingAccess(10001,"2020-10-11 08:20:00","CONFIRM_2","C_2",10002)

当我使用checkData函数检查数组时,得到的结果如下:

代码语言:javascript
复制
    Result {
  '0': '2020-10-11 08:20:00',
  '1': 'CONFIRM_2',
  '2': 'C_2',
  '3': BN {
    negative: 0,
    words: [ 51784655, 4, <1 empty item> ],
    length: 2,
    red: null
  }
}

问题是第一个数组的结果在哪里?如何从区块链中找回它?这是否从区块链中删除(据我所知,区块链数据被永久记录)?

谢谢你的帮助和回答:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-15 10:27:07

由于要在相同的键(dictConfirmAccess[_nik] = ...)下存储到映射,因此值将得到覆盖的

使用Remix仿真器,目前无法访问以前的状态。

如果这种情况发生在活动网络上,则可以连接到存档节点并使用

  1. 存储槽号 可确定,基于契约中的属性顺序和映射键- https://docs.soliditylang.org/en/v0.8.9/internals/layout_in_storage.html#layout-of-state-variables-in-storage
  2. 和块号 你想要得到的价值

例如,使用web3 getStorageAt方法

代码语言:javascript
复制
const historicalValue = await web3.eth.getStorageAt(
    contractAddress,
    storageSlotNumber,
    blockNumber
);

请注意,历史值只能使用离链工具访问,不能从契约本身(或其他契约)访问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69582017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档