首页 > 解决方案 > 如何将包含函数的 JSON 对象添加到 S3 存储桶?

问题描述

我正在创建一个通过azimuth-js与以太坊区块链交互的 Node 应用程序。有多种方法必须按顺序运行(创建未签名的交易、签名、发送等),因为要进行实际的区块链交易。我正在使用 AWS Step Function 对这些进行排序,其中特定步骤在 AWS Lambdas 中执行代码。

Lambdas 的严格大小限制需要相对细粒度的拆分,为了可视化目的,我无论如何都想这样做。我使用的大多数 Azimuth 方法都需要传入由initContractsPartial创建的 contracts 对象。这非常大,超过了 Step Function 步骤之间可以直接作为输出和输入传递的限制。根据这个 Stack Overflow answer,最好的解决方案是将数据存储在 S3 存储桶中并从那里提取。

我已经这样做了,JSON.stringify在上传之前使用。但是当我把它拉出来时,对象中的方法就消失了。以前,methods 对象具有以下形式(删除了某些敏感数字):

methods: {
  escapeRequestsIndexes: [Function: bound _createTxObject],
  <SOME_NUMBERS_HERE>: [Function: bound _createTxObject],
  'escapeRequestsIndexes(uint32,uint32)': [Function: bound _createTxObject],
  votingFor: [Function: bound _createTxObject],
  <SOME_NUMBERS_HERE>: [Function: bound _createTxObject],
  'votingFor(address,uint256)': [Function: bound _createTxObject],
  ...
}

从 S3 存储桶中取出后,变成:

methods: {}

似乎JSON.stringify在字符串化之前评估它们并使它们消失。具体来说,包含方法的 JSON 对象的对象现在是一个空对象。原始较大对象的非功能部分很好。

我尝试了其他方法将其转换为 S3-ready 形式,例如创建一个Buffer或使用fs创建一个文件然后上传,但同样的事情总是会发生。

我一直无法在网上找到解决方案。我怎样才能实现我的目标?

标签: javascriptnode.jsamazon-web-servicesamazon-s3urbit

解决方案


推荐阅读