1

我想从 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

4

2 回答 2

1

这是我能够获取所有模板数据的示例代码。

PackageCatalog 包含所有 templateID 的 JSON

templateId: { packageId: 'my-package-id', moduleName: 'SomeModule', entityName: '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) {

    }
  }
})
于 2019-11-14T07:11:46.707 回答
0

ArchivedEvent不会公开最初创建合同的论点。

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

  1. 您可以查看Extractor,它将合同转储到 RDBMS 上,您可以在其中查询存档合同,或者
  2. 编写您的应用程序,从一开始就重放交易流TransactionService#getTransactions,将传入的合约保存为CreatedEvents,然后在看到 时将它们标记为已存档ArchivedEvent,使用合约标识符作为参考。

请注意,Node.js 绑定当前是一个社区驱动的项目,因此它们可能落后于最新版本。

于 2019-11-13T07:09:53.777 回答