如何在 AssemblyScript 中为 NEAR 合约创建 UID?
Posted
技术标签:
【中文标题】如何在 AssemblyScript 中为 NEAR 合约创建 UID?【英文标题】:How to create a UID in AssemblyScript for a NEAR contract? 【发布时间】:2021-12-09 13:30:23 【问题描述】:试图在 AS 中创建一个 uniqueId。
我添加了这个包
npm install as-nanoid --save
安装的 nanoid 函数如下:
let urlAlphabet = ['M','o','d','u','l','e','S','y','m','b','h','a','s','O','w','n','P','r','-','0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','N','R','V','f','g','c','t','i','U','v','z','_','K','q','Y','T','J','k','L','x','p','Z','X','I','j','Q','W']
export function nanoid(length: number = 21): string
let id = ''
for (let i = 0; i < length; i++)
id += urlAlphabet[i32(Math.floor(Math.random() * 64))]
return id
在我的程序集index.ts
文件中,我有以下内容:
import nanoid from 'as-nanoid'
@nearBindgen
class MyClass
public id: string
constructor()
this.id = nanoid(8)
使用NEAR-SDK-AS
当我在部署合同后初始化合同时。
near call $CONTRACT init --accountId $CONTRACT
我收到以下错误:
Error: "index":0,"kind":"ExecutionError":"Link Error: Error while importing \"env\".\"seed\": unknown import. Expected Function(FunctionType params: [], results: [F64] )"
如有任何帮助,我们将不胜感激,或者如果有更简单的方法来创建 uniqueId,请分享。
【问题讨论】:
【参考方案1】:function generateRandomDna(): string
let buf = math.randomBuffer(DNA_DIGITS);
let b64 = base64.encode(buf);
return b64;
类似的东西,来自文档,如有必要,使用可用的Math 进行变体。
我现在在合约中所做的是将账户名和区块高度放在一起:
const title = context.sender.substring(0, context.sender.lastIndexOf('.'))
this.id = title + '-' + context.blockIndex.toString()
【讨论】:
这太好了,你能分享一下我在文档中哪里可以看到这个吗? 我在想只是在前端生成UID并在创建类的实例时将其作为参数传递,而不是在AS中自动创建它。想法? @andy-dev 应该没问题,但我不会过分依赖前端。也就是说,用户可以在签名之前看到传递给函数的参数。以上是关于如何在 AssemblyScript 中为 NEAR 合约创建 UID?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AssemblyScript 中使用 asc 编译 console.log("1")?
WebAssembly学习:AssemblyScript - Hello World
三等号 (===) 在 AssemblyScript 中的行为是不是不同?
在 AssemblyScript 中连接或合并 TypedArrays