builder method Null safety
override
Implementation
static InvokeHostFuncOpBuilder builder(XdrInvokeHostFunctionOp op) {
XdrHostFunction xdrHostFunction = op.function;
if (xdrHostFunction.discriminant !=
XdrHostFunctionType.HOST_FUNCTION_TYPE_INVOKE_CONTRACT ||
xdrHostFunction.invokeArgs == null) {
throw new Exception("invalid argument");
}
List<XdrSCVal> invokeArgsList = xdrHostFunction.invokeArgs!;
if (invokeArgsList.length < 2 ||
invokeArgsList.elementAt(0).discriminant != XdrSCValType.SCV_OBJECT ||
invokeArgsList.elementAt(0).obj == null ||
invokeArgsList.elementAt(1).discriminant != XdrSCValType.SCV_SYMBOL ||
invokeArgsList.elementAt(1).sym == null) {
throw new Exception("invalid argument");
}
XdrSCObject contractIDSCObject = invokeArgsList.elementAt(0).obj!;
if (contractIDSCObject.discriminant != XdrSCObjectType.SCO_BYTES ||
contractIDSCObject.bin == null) {
throw new Exception("invalid argument");
}
String contractID = Util.bytesToHex(contractIDSCObject.bin!.dataValue);
String functionName = invokeArgsList.elementAt(1).sym!;
List<XdrSCVal>? funcArgs;
if (invokeArgsList.length > 2) {
funcArgs = List<XdrSCVal>.empty(growable: true);
for (int i = 2; i < invokeArgsList.length; i++) {
funcArgs.add(invokeArgsList[i]);
}
}
List<ContractAuth> contractAuth = ContractAuth.fromXdrList(op.contractAuth);
return InvokeHostFuncOpBuilder.forInvokingContract(contractID, functionName,
functionArguments: funcArgs,
footprint: op.footprint,
contractAuth: contractAuth);
}