【问题标题】:Is there a way to externally listen to (contract-call? ...) calls on a contract?有没有办法从外部收听(合同调用?...)对合同的调用?
【发布时间】:2022-10-12 23:31:34
【问题描述】:
我有两个 Clarity 合同(让我们称之为一个和乙),以及一个监听函数调用的应用程序一个,使用@stacks API 客户端。
当我手动调用任何函数时,这很好用一个(使用脚本或沙盒,启动transaction)。
但是如果我调用一个函数一个从合同乙像这样:
(as-contract (contract-call? .contract-A contract-A-function-name param1 param2))
假设contract-A-function-name 是一个只有(打印)事件的简单函数。
这是成功的,但是在合约上没有单独的 tx/event 来监听一个.这可能是预期的行为,但我的问题仍然是:有没有办法知道何时以这种方式调用合约 A 的函数?
【问题讨论】:
标签:
blockchain
smartcontracts
clarity
clarity-lang
【解决方案1】:
没错,调用函数时没有报告事件,但是可以找到打印的事件。你可以query for events 得到这样的回复:
{
"event_index": 1,
"event_type": "smart_contract_log",
"tx_id": "0x05ccc123db703a2808afaaf88b6b3240f14391d14fde701bd20d7206c9133af6",
"contract_log": {
"contract_id": "ST000000000000000000002AMW42H.bns",
"topic": "print",
"value": {
"hex": "0x0c000000010a6174746163686d656e740c00000003106174746163686d656e742d696e646578010000000000000000000000000000028304686173680200000014b472a266d0bd89c13706a4132ccfb16f7c3b9fcb086d657461646174610c00000004046e616d65020000000a62696c616c7465737435096e616d6573706163650200000003627463026f700d0000000d6e616d652d7472616e736665720974782d73656e646572051a27b6e19aaa1880e842bc709b4130b347b1f2d7f2",
"repr": "(tuple (attachment (tuple (attachment-index u643) (hash 0xb472a266d0bd89c13706a4132ccfb16f7c3b9fcb) (metadata (tuple (name 0x62696c616c7465737435) (namespace 0x627463) (op "name-transfer") (tx-sender STKVDRCTN8C81T22QHR9PG9GPD3V3WPQYBYFHPT4))))))"
}
}
}