首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用AssemblyScript在NEAR contract上使用PersistentUnorderedMap?初始化后,PersistentUnorderedMap不会出现在合同存储中

PersistentUnorderedMap 是 AssemblyScript 的一个数据结构,用于在 NEAR 合约中存储和管理无序的键值对。在 NEAR 合约中使用 PersistentUnorderedMap 需要经过以下步骤:

  1. 确保你的 NEAR 开发环境已经正确设置并安装了 AssemblyScript。可以通过 NEAR CLI 工具来完成这一步骤。
  2. 在你的项目中创建一个名为 assembly 的文件夹,用于存放 AssemblyScript 的代码文件。
  3. assembly 文件夹中创建一个新的 AssemblyScript 文件,命名为 persistent_unordered_map.ts
  4. persistent_unordered_map.ts 文件中引入 NEAR 相关的包和模块:
代码语言:txt
复制
import { PersistentUnorderedMap } from "near-sdk-as";
  1. 定义一个全局的持久化无序映射变量,用于存储数据:
代码语言:txt
复制
export const myMap = new PersistentUnorderedMap<string, string>("myMap");

这里创建了一个名为 myMap 的持久化无序映射,其中键的类型为 string,值的类型也为 string。你可以根据实际需求选择适合的类型。

  1. 在合约初始化函数中,你可以使用 set() 方法向持久化无序映射中添加键值对:
代码语言:txt
复制
export function init(): void {
  myMap.set("key1", "value1");
  myMap.set("key2", "value2");
}

在上述代码中,我们通过调用 set() 方法将键值对添加到 myMap 中。

  1. 在其他合约函数中,你可以通过 get() 方法从持久化无序映射中获取对应的值:
代码语言:txt
复制
export function getValue(key: string): string | null {
  return myMap.get(key);
}

在上述代码中,我们定义了一个名为 getValue 的函数,它接受一个参数 key,并通过调用 get() 方法返回对应的值。

  1. 如果你想删除某个键值对,可以使用 delete() 方法:
代码语言:txt
复制
export function deleteValue(key: string): void {
  myMap.delete(key);
}

在上述代码中,我们定义了一个名为 deleteValue 的函数,它接受一个参数 key,并通过调用 delete() 方法从持久化无序映射中删除对应的键值对。

  1. 最后,你可以在 NEAR 合约的存储中查看 PersistentUnorderedMap 的数据。注意,这些数据将被序列化并存储在链上的存储中。你可以使用 NEAR 的查询接口或工具来检查存储中的数据。

这样,你就可以使用 AssemblyScript 在 NEAR 合约中使用 PersistentUnorderedMap。请确保在编写和部署合约时,遵循 NEAR 的开发指南和最佳实践。

腾讯云相关产品推荐:

  1. 云函数(Serverless):提供无服务器计算服务,适合快速构建和部署无状态函数。
  2. 云数据库 CDB:可靠、可扩展、高性能的云数据库服务。
  3. 云原生容器服务 TKE:高度可扩展的容器管理服务,用于简化应用程序的部署和管理。
  4. 内容分发网络 CDN:提供高速、安全、稳定的全球覆盖的内容分发服务,加速内容传输和网站访问。

以上是对如何使用 AssemblyScript 在 NEAR contract 上使用 PersistentUnorderedMap 的完善且全面的答案。希望能对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何利用OpenZeppelin编写可升级的智能合约

智能合约部署就不能变更(设计的不变性)。另一方面,软件质量很大程度上取决于迭代升级和修补源代码的能力。...请注意,整个升级过程如何保留列表的大小及其地址。无论您使用的是本地区块链,测试网还是主网络,此过程都是相同的。...CLI不仅管理合同升级,而且还管理编译,交互和源代码验证。升级库仅负责创建和升级。该库也不会跟踪已经部署的合同,也不会像CLI那样运行任何初始化程序或验证存储空间。...这等效于构造函数设置这些值,因此,不适用于可升级合同。 解决方法:初始化 确保初始化函数设置所有初始值,如下所示;否则,任何可升级实例都不会设置这些状态变量。...这不会构成威胁,因为逻辑合同状态的任何更改都不会影响您的代理合同实例,因为逻辑合同存储从未在您的项目中使用。 但是,有一个例外。

3.7K61
  • 兼容EVM、Wasm虚拟机的实现思路

    开发者可以使用传统的Solidity语言编写合约、或其它可以编译为WebAssembly高级语言(如:Rust/C++/AssemblyScript)编写合约,将编译的合约字节码上传至Coinex Smart...基于上述这种开发理念,引申出一个问题:如何在Wasm实现实现Ethereum Semantic....Wasm提供系统合约,来运行Solidity字节码的合约 Wasm虚拟机上构建EVM字节码器,来运行编译的Solidity字节码。...smart chain使用了[ethereum/evmone]作为以太坊虚拟机的实现,该项目内部实现了以太坊的所有指令;同时,提供了一个接口HostContext,负责与区块链进行数据交互;smart...虚拟机执行时,通过使用ABI编码的参数,来做到虚拟机之间的互相调用 type ContractInfo struct { ContractType uint8 } func CreateVM

    57910

    面向企业的区块链教程(一)

    例如,菜单的词或对话框的词文本显示为这样。示例:“现在选择一个文件,输入所有者的名字,然后点击 提交。 .” 警告或重要说明会出现在这里。 提示和技巧会出现在这里。...而在修饰符的情况下,在前一个修饰符的_;的代码调用方的代码执行完成执行。在上述示例,第五、六和七行永远不会执行。第四行之后,执行直接从第八到第十行开始。...存在性、完整性和所有权证明合同 如今,企业正在使用电子签名解决方案签署协议。然而,这些文件的详细信息存储可以轻松更改的数据库,因此不能用于审计目的。...让我们编写一个 Solidity 合同,可以证明文件所有权而不泄露实际文件。它可以证明文件特定时间存在,并检查文件的完整性。 企业可以使用此解决方案区块链存储其协议的哈希。...您将首先获得事务哈希,等待一段时间,事务被挖掘您将获得合同地址。事务哈希是事务的哈希值,对于每个事务都是唯一的。每个部署的合同都有一个唯一的合同地址,用于区块链中标识合同

    16200

    Service Cloud零基础学习(二)Entitlement & MileStone

    那么我们1年以内坏了会通过电话,在线网络等方式联系售后支持人员。如果超过1年,售后支持人员则不会对此产品给你免费的维修。...需要注意的是,Lightning, Contact关联列表不展示 Entitlement。 Entitlement如何决定要挂在哪个表下面呢或者说怎么决定一个客户是否有support的权力呢?...此种模式可以以下的情景下考虑使用: 1)不需要在服务合同上管理你的客户的 Entitlement; 2)你的合同没有续期的流程; 3)你的客户没有购买Entitlement,Entitlement保单和产品是绑定在一起的...此种模式可以以下的情境下考虑使用: 1)服务合同,Entitlement是单独购买和,管理上和产品是单独分开的; 2)你的客户可以服务合同续签Entitlement; 3)使用Salesforce...比如A公司卖电脑和云存储。针对电脑这种硬件可能30天的问题换货,1年保修。针对云存储可能2年的电话服务,针对不同产品的不同权力,这里就涉及到添加合同的行项目到服务合同

    84110

    以太坊实现智能合约升级的三种代理模式

    代理合约使用自定义的fallback函数将调用请求重定向到其他合同。•每当合约A将调用代理到另一个合同B时,它都会在合约A的上下文中执行合约B的代码。...使用calldatasize获得msg.data的大小,使用calldatacopy将其复制到ptr变量。 注意如何初始化ptr 变量。...这三种模式都用来解决同一个难题:如何确保目标合约不会覆盖代理合约中用于升级的状态变量。 所有代理模式的主要关注点是如何处理存储分配。...需要注意的是,拥有注册合约并不会影响存储机制。实际,本文讲述的这几种存储模式都可以实现该机制。 ? 如何初始化 1.部署Registry合约2.部署初始版本目标合约(v1)。...使用永久存储实现可升级 Eternal Storage模式[7],存储结构是单独的合约定义,代理合约和逻辑合约都继承存储合约。

    3.2K20

    TheGraph 去中心化网络服务

    简短的说:区块链的事件是一种非常有效的添加数据的方式,而不必将其存储每个节点(这很昂贵)。事件是通过使用bloom filter[6]来实现的,客户端能够解析区块和交易,以快速找到其要找的数据。...这在构建前端和显示区块链中发生的数据时是非常重要的,而不必将数据直接存储智能合约。 现在,The Graph 开始了一个新的去中心化的网络,也增加了更多的功能。...消费者可以是直接的终端用户,例如正在使用 Dapp 或中间件服务的用户。 索引器(Indexer): 索引器是那些实际提供运行服务器、索引事件并将其存储在数据库的服务的人。...查询验证 现在的问题是,你如何验证 The Graph 查询的正确性?最初 The Graph ,这是由链争议解决程序处理的,通过仲裁决定。...新的区块链:虽然去中心化网络还不能使用,但 The Graph 已经为新公链增加了索引支持,最需要了解的是Cosmos[18]、NEAR[19] 和Arweave[20]。

    88220

    网站开发合同,第1部分:如何避免重大灾难 (tech law)

    您可以询问客户,他们是否对IT供应商项目阶段的完成程度进行评估,是否需要一名特定人员从事IT项目,合同谈判进行得如何,对是否需要更多的培训方面有没有意见等等。...如果您对他们不完全信任,则值得花时间互联网上进行深入检索,以了解供应商是否曾出现在有关诉讼(或仲裁)的任何新闻报导或文章。...会议期间,将您在讨论的发现与供应商现有和以前的客户进行整合-尤其是标记有涉及工作范围或计划过程的任何问题时。...例如,如果您从供应商的现有客户那里了解到供应商准备线框方面做得不好,那么您的合同可能需要允许您在接收线框之前进行多次审核。...客户们不会选择看起来已有10年历史的网站。您合同的一部分应该包括每隔几年重新对网站进行设计,以使它看起来不会过时。

    45430

    安全考量

    如果您只将该购物清单存储该Web服务,则可能不必太在意,但如果您使用该Web服务管理您的银行账户,则应该更加小心。 本节将列出一些陷阱和一般安全建议,但当然可能永远不会完整。...这将让它得到多次退款,并基本检索合同的所有以太网。...Gas限制和循环 没有固定迭代次数的循环(例如取决于存储值的循环)必须小心使用:由于区块gas限制,交易只能消耗一定量的gas。...这笔津贴不能以任何方式访问存储。 为确保您的合同能够以此方式接收Ether,请检查故障预置功能的gas请求(例如,Remix的“详细信息”部分)。...限制可以存储智能合约的Ether(或其他tokens)数量。 如果您的源代码,编译器或平台有错误,这些资金可能会丢失。 如果你想限制你的损失,限制Ether的数量。

    53540

    IRIS Chronicles 数据库结构

    对于 IRIS 来说,因为是使用的层级数据库,所以上面的定义就不能完全的照搬了,而且不建议想象成一样,因为我们没有办法最后完全的对应。我们最好的是把 IRIS 想想成一个文件存储柜,如下面的图。...第二层 RecordIRIS 定义第二层为 Record,实际 就是你每个抽屉中放的一个一个的文件夹。以病人的病历为例,上面每一个病人就会使用一个文件夹来装病人的数据。...这个英文单词在这里又有歧义了,因为和中文翻译合同是同一个词。但在这里没有合同的意思,所以只能最好使用英文原词来避免歧义。... Map 的 K,我们通常使用的词是 Key,但 IRIS 用的单词是 Item。...Item就是定义 Map 的 Key,通过这个定义来约束 Value 能够存什么样的东西,这个类似我们关系数据库表里面定义的字段,通过这个定义的字段来对可以存储的值来进行约束。

    15310

    合同 - 产品 - 收入确认 示例来讲解领域逻辑模式

    已知每个合同合同ID,假设产品类型现有的收入确认方式为(s->a),(w->b),(d->c) (s->a)表示如果产品类型是s,那么收入确认的方式就是a,依次类推,一共有3产品 数据库的三张表...: products 、contracts、revenueRecognitions 代码以说清楚为目的,不会完整写下实例,会用参合伪代码 事务脚本 使用过程来组织业务逻辑,每个过程处理来自表现层的单个请求...他有两种风格 几乎每一个数据库表都对应一个对象,和数据库表类似,可以直接让领域对象本身去存储数据 使用继承、策略和其它设计模式,有多个互联的细粒度对象组成的复杂网络,需要数据映射器 对象之间的连续传递,...典型的流程是,应用程序首先将数据汇集到一个记录集中,使用该记录集创建一个表模块,如果有多个表模块行为,则一起创建,这样表模块就可以在记录集应用业务逻辑,然后将修改的记录集传给表现层,表现层处理完,...表模块依赖于以表的形式组织数据,适合于使用记录集存取表数据的情况,但是表模块没有提供面向对象能力来组织复杂的领域逻辑,不能在实例之间建立联系 服务层 通过一个服务层来定义应用程序边界,服务层建立一组可用的操作集合

    62420

    以太坊go-ethereum常见问题汇总

    它还允许图形用户界面创建和交互合同,而无需使用命令行。 如果你不是开发人员,只是想存储ether和与Ethereum合约交互,那么你可以使用Mist程序。...以太坊平台上快速原型和调试分散应用程序。 (3) 如何在blockchain存储大文件? 一般来说,你不会在Ethereum blockchain存储大型文件或数据,因为存储成本很高。...(6) 帐户和“wallet contract”之间有什么区别? 帐户是你的公钥/私钥对文件,用作你区块链的身份证明。...“wallet contract ”是一个以太坊合约,保护你的身份和身份特权,如多重签名和程序限制存款/提款。 可以Mist Ethereum钱包GUI客户端轻松创建钱包合同。...当然,你也可以本地加密数据,然后将其广播到网络。 (17)可以Ethereum网络存储秘密或密码吗? 所有关于以太坊的数据都是公开的。 以太坊合同存储秘密或密码,而不被所有人看到是不可能的。

    1.2K20

    如何用Python和Flask框架开发以太坊智能合约

    将数据存储在数据库是任何软件应用程序不可或缺的一部分。无论如何控制该数据库都有一个该数据的主控。区块链技术将数据存储到区块链网络内的区块。...我们将它存储区块链,它是不可变的。 ? 环境要求 Python 3.6 安装 1.创建一个python虚拟环境。...Solidity是ethereum编写智能合约的语言。智能合约包括我们将在区块链存储的数据,数据和getter方法的可选验证函数,访问数据的setter方法。...这与合约部署tx_receipt获得的信息相同。 6.现在将abi和contract_address存储json文件。这样我们以后可以flask api中使用它来存储合约的用户对象。...但是使用它的地址,你会一次又一次地存储数据。同样,db的世界,你只需定义一次模型/模式,但你将在db添加不同的行/文档。 我们将使用flask post api来获取用户的用户信息并返回成功。

    1.6K30

    开发人员最难掌握的Web3.0概念

    您将恢复的数据示例包括: 您用户的帐户余额 存储智能合约的公共变量 存储智能合同 第三步 接下来,您使用恢复的数据编写并启动新合同。如果您的数据很少,则可以一次事务完成此过程。...您的最终用户始终与您的代理合同进行交互,该合同存储您的所有应用程序数据。但是,该方法的实际逻辑存储逻辑合约。 当用户与代理合约交互时,它会将这些交易转发到逻辑合约并从函数调用检索返回数据。...在这个例子,合约 A 使用委托调用来调用合约 B 的setVars,只是我们使用合约 A 的存储而不是合约 B 的存储的数据来执行调用。...但是,这不会构成威胁,因为逻辑契约状态的更改不会影响您的应用程序;您的应用程序将数据存储代理合约而不是逻辑合约。 可升级智能合约的优缺点 可升级的智能合约已经变得非常流行。...我们使用以下变量定义了代理和逻辑合约。 代理将逻辑合约的地址存储第一个存储。逻辑合约将“所有者”的地址存储在其第一个槽。两个变量的大小均为 32 字节。

    92520

    以太坊预言机与智能合约开发

    The Tinypay.co DNS Oracle Tinypay的预言机做了三件简单的事情: 从合同中提取'ClientCreated'事件 使用来自事件的数据验证DNS记录 域名确认,向合约发送'...我想直接使用RPC API与Ethereum节点进行所有通信。 这很有趣,因为我能够学习很多关于以太坊协议如何进行存储和数据编码等较底层的内容。...我必须手动重新代码创建ABI(应用程序二进制接口),并使用它来发送和解密消息。 ABI对于定义合约如何交互以及如何从线上的原始字节中提取数据是必需的。...从事件实际提取数据证明比我想象的要复杂得多。Go-Ethereum的处理事件没完成。我被迫手动轮询RPC端点,并找出如何将来自原始事件的二进制数据解码。...我开始使用Alex Beregszaszi非常有用的'tinyoracle'指南,这让我第二版获得了不错的成果 下面的代码是经过选择编辑的,完整的代码可以github存储库中找到(本次迭代的标签为

    1.1K30

    Ethernaut WriteUp 更新到22题 Shop

    函数的局部变量默认为存储或内存,具体取决于其类型。未初始化的本地存储变量可以指向合约的其他意外存储变量,从而导致故意(即开发人员故意将它们放在那里进行攻击)或无意的漏洞。...Locked 考察知识点 使用初始化存储器局部变量导致的漏洞 解题过程 copy一段解释: 为了讨论这个漏洞,首先我们需要了解存储(Storage) Solidity 的工作方式。...作为一个高度抽象的概述(没有任何适当的技术细节——我建议阅读 Solidity 文档以进行适当的审查),状态变量按它们出现在合约的顺序存储合约的 Slot (它们可以被组合在一起,但在本例不可以...正如你所看到的,在这个特殊的例子存储存在着很大的浪费。...因此, [16] 行的 newRecord 默认为storage。合约的漏洞是由 newRecord 未初始化导致的。

    1.7K30

    Time-locked Wallets:一个以太坊智能合约的教程

    基于密码的“最后遗嘱和遗嘱” 另一个想法是使用智能合约作为加密意志。想象一下,我们希望将我们的加密货币储蓄存储在家庭成员可以访问的合同,但只能在我们发生某些事情才能使用。...通过分离不同钱包的资金,我们不会只有一个拥有大量乙醚和代币的合同。这将给钱包所有者100%的控制权,并希望阻止黑客尝试利用它。...请注意view(较旧版本的编译器版本constant)表示这是一个不会更改区块链状态的函数,因此可以不花费任何气体的情况下免费调用它。...该项目的源代码GitHub可用。 如果您想知道如何使用uPort移动应用程序而不是MetaMask,请查看该项目的另一种黑客马拉松获胜版本的演示和源代码。...是的,它在性质完全分散。阅读和写作操作完全分散,目前由工作证明机制保证。以太坊的设计方式不会让任何人或团队控制区块链。 以太坊使用什么编程语言? 以太坊的选择语言目前是Solidity。

    2.5K20

    Ethernaut闯关录(下)

    之后在下面的主合约里,定义了一个bool型的top变量,goto函数里对传入的_floor变量进行了判断,从逻辑我们发现判断的条件里如果isLastFloor返回false,通过if再将isLastFloor...Preservation 闯关条件 此合同使用存储两个不同时区的两个不同时间,构造函数为每次要存储的库创建两个实例。而玩家的目标是获取合约的owner权限。...关于这一个我之前的智能合约审计系列3讲过一个“变量覆盖”的专题,里面有相关的描述,这里不再赘述了,总体来说这里的漏洞出现在结构体的重定义导致变量覆盖问题。...部署第一个令牌合约,创建者发送了0.5ether以获取更多token。后来他们失去了合同地址。如果您可以从丢失的合同地址恢复(或移除)0.5ether,则此级别将完成。...了解到 OPCODE 数组长度是存储某个slot的,并且没有对数组长度和数组内的数据做校验。所以可以构造一个存储长度很大,但实际并没有数据的数组,打包成data 发送。

    1.1K10

    DDOS概述

    : 未设定Gas费用的外部调用 在这种情况下,您可能希望对未知合同进行外部调用并继续处理事务,而不管该调用是否失败,通常通过call操作码来实现的,如果调用失败,调用操作码不会还原事务(有关更多详细信息和示例...18行,我们执行一个外部调用,将合同余额的1%发送到用户指定的帐户,使用call操作码的原因是,即使外部call回滚,也要确保合约的owner仍然获得1%的报酬,而问题是事务将把它的所有gas(实际,...例如,考虑以下消耗所有gas的恶意合同contract ConsumeAllGas { function () payable { // an assert consumes...,并将所有资金永远锁定在TrickleWallet 防御措施 为了防止这种DOS攻击,请确保在外部调用中指定gas stipend,以限制该事务可以使用的gas量,我们的例子,我们可将L18更改为如下代码...gas的价格,以完成其交易 外部操作的映射或数组循环 案例分析 通常情况下,它出现在合约的owner希望在其投资者之间分发token的场景,并使用类似distribute()的函数来执行此操作,如示例合同中所示

    2.3K60
    领券