CKB中可以获取到Inputs中Live Cell的创建时间,但是无法获取当前交易所在区块的时间戳。当需要获取时间信息时,可以使用两步机制,例如在去中心化借贷场景中,存款方在提取UDT时,先生成取款单,然后再进行取款操作,根据取款单的时间计算利息。而对于还款的情况会更复杂,要考虑用户提前提交还款单后,可能存在迟迟不确认还款的情况,最终还款时利息会少很多,需要设计一种复杂机制来处理这种情况。两步机制会造成中间状态的问题。
在这里通过使用时间Oracle的方法来获得当前的时间,避免这种两步操作,降低合约的复杂度。
时间Oracle可以一小时更新一次或者10分钟等更新一次。实时性要求,跟时间Oralce的更新频率有关。
源码:GitHub - u2/ckb-time-oracle
已经部署在测试网
const time_type_id = "0x63eb41aadea32411547cdd9b62f7347b3c719cd1ae17f28123765d9098af7c96";
const time_cell_dep = {
outPoint: { txHash: "0x46093a1cbe8657478bccbc5f664c075fd7dfac961bbc754c660f65922fadecaf", index: 0 },
depType: 0,
}
const time_script = {
codeHash: "0x63eb41aadea32411547cdd9b62f7347b3c719cd1ae17f28123765d9098af7c96",
hashType: "type",
args: "0x7ac202f08b41448259ca387eee84ac4c285a33124628841ad7ee1815c61ec49108d1374b76cb5104ace0e2394b5d873f05c7ed8e8659d54b4cc29a98bf66b820";
};