commandToGrpcCommand function
Implementation
grpc_transaction.Command commandToGrpcCommand(Map<dynamic, dynamic> cmd) {
switch (cmd['\$kind']) {
case 'MoveCall':
return grpc_transaction.Command(
moveCall: (grpc_transaction.MoveCall(
package: cmd['MoveCall']['package'],
module: cmd['MoveCall']['module'],
function: cmd['MoveCall']['function'],
// Commands.moveCall stores typeArguments in an untyped list
// (`List<dynamic>`), so cast here to satisfy proto's
// `Iterable<String>?` — avoids a runtime type error for move
// calls that take no type parameters.
typeArguments: (cmd['MoveCall']['typeArguments'] as List?)?.cast<String>(),
arguments: toIterableGrpcArguments(cmd['MoveCall']['arguments']),
)),
);
case 'TransferObjects':
return grpc_transaction.Command(
transferObjects: grpc_transaction.TransferObjects(
objects: toIterableGrpcArguments(cmd['TransferObjects']?['objects']),
address: toIterableGrpcArguments([(cmd['TransferObjects']['address'])])[0],
),
);
case 'SplitCoins':
return grpc_transaction.Command(
splitCoins: grpc_transaction.SplitCoins(
coin: toIterableGrpcArguments([cmd['SplitCoins']['coin']])[0],
amounts: toIterableGrpcArguments(cmd['SplitCoins']['amounts']),
),
);
case 'MergeCoins':
return grpc_transaction.Command(
mergeCoins: grpc_transaction.MergeCoins(
coin: toIterableGrpcArguments([cmd['MergeCoins']['destination']])[0],
coinsToMerge: toIterableGrpcArguments(cmd['MergeCoins']['sources']),
),
);
case 'Publish':
return grpc_transaction.Command(
publish: grpc_transaction.Publish(
modules: cmd['Publish']['modules']
.map<Uint8List>((module) => base64Decode(module as String))
.toList(),
dependencies: List.from(cmd['Publish']['dependencies'] ?? []),
),
);
case 'MakeMoveVec':
return grpc_transaction.Command(
makeMoveVector: (grpc_transaction.MakeMoveVector(
elementType: cmd['MakeMoveVec']['type'],
elements: toIterableGrpcArguments(cmd['MakeMoveVec']['elements']),
)),
);
case 'Upgrade':
return grpc_transaction.Command(
upgrade: grpc_transaction.Upgrade(
// modules are base64-encoded strings in internal format
modules: cmd['Upgrade']['modules']
.map<Uint8List>((module) => base64Decode(module as String))
.toList(),
dependencies: List.from(cmd['Upgrade']['dependencies'] ?? []),
package: cmd['Upgrade']['package'],
ticket: toIterableGrpcArguments([cmd['Upgrade']['ticket']])[0],
),
);
default:
throw Exception("Unknown Command kind: $cmd");
}
}