trident-java提供了通过交易id和签名消息来验证签名正确性的方法,用于广播交易之前的离线验证。
签名验证的原理
在已知交易发起者(contract owner)地址的情况下,通过签名消息逆推公钥(recover),并将公钥转换为地址,与发起者地址进行比较。如果地址一致,即为验证成功。
验证签名的方法
验证方法需要三个参数:
-
交易id(即交易哈希,通过
Transaction.rawData
计算SHA256得到) -
签名消息(即
Transaction.signature
) -
发起者地址(即
Transaction.rawData.contract.parameter.ownerAddress
,其中parameter
的类型是com.google.protobuf.Any
,需要根据具体交易类型来进行unpack
操作)
签名验证方法能接收两种类型的参数:byte[]
或String
//parent function
public static boolean verify(byte[] txid, byte[] signature, byte[] owner)
public static boolean verify(String txid, String signature, String owner)
如果返回true
即为验证成功。