如何使用Node.js绑定从DAML中的存档合同中获取数据?

时间:2019-11-12 14:10:08

标签: node.js daml

我想从DAML中的已归档合同中获取历史数据,以便可以将其用于审计目的。 我读到有关JSON API服务的信息,但只能这样做。

https://docs.daml.com/json-api/index.html

  1. 创建
  2. 锻炼
  3. 查询有效合同。

我正在经历DAML的nodejs绑定,发现“ Interface ArchivedEvent”,但无法理解如何利用它来获取数据。 https://digital-asset.github.io/daml-js/latest/interfaces/archivedevent.html

2 个答案:

答案 0 :(得分:1)

  

这是示例代码,通过它我可以获取所有模板数据。

PackageCatalog包含所有templateID的JSON

  

templateId:{           packageId:“ my-package-id”,           moduleName:'SomeModule',           实体名称:“ SomeTemplate”       }

const ledger = require('@digitalasset/daml-ledger'); 
const templateIds = require('../config/PackageCatalog.json')


const connect = util.promisify(ledger.DamlLedgerClient.connect.bind(ledger.DamlLedgerClient))
const client = await connect({ host: ' host id of your like localhost or some ip', port: 'your sandbox port number' })
const tmplt_Test = templateIds['Main.Test.Testuno:Testtemp']
const filtersByParty = {}
filtersByParty['Party Data you want to fetch'] = { inclusive: { templateIds: [tmplt_Test] } };
const GetTransactionsRequest = {
  begin: { offsetType: 'boundary', boundary: ledger.LedgerOffsetBoundaryValue.BEGIN },
  filter: { filtersByParty: filtersByParty }
};
let getAllTransactionData = client.transactionClient.getTransactions(GetTransactionsRequest);

getAllTransactionData.on('data', response => {
  console.log(" \n\n response :::: " + JSON.stringify(response))
  for (let transaction of response.transactions) {
    let events = transaction.eventsById;
    for (let eventId in events) {

    }
  }
})

答案 1 :(得分:0)

ArchivedEvent没有公开最初创建合同的参数。

您可以采用两种可能的审计方法:

  1. 您可以看看Extractor,它会将合同转储到RDBMS上,您可以在其中查询已存档的合同,或者
  2. 将您的应用编写为从TransactionService#getTransactions开始重播交易流的位置,保存以CreatedEvent形式出现的合同,然后在看到ArchivedEvent时将其标记为已存档,以合同标识符为参考。

请注意,尽管Node.js绑定当前是社区驱动的项目,所以它们可能落后于最新版本。