I have the following code:
pub async fn test_block() -> Result<Vec<u8>, SuiError> {
let client = SuiClientBuilder::default()
.build(RPC_URL)
.await
.unwrap();
let mut private_key = decode_private_key(PRIVATE_KEY);
private_key.insert(0, 0x00);
let keypair = SuiKeyPair::from_bytes(&private_key).unwrap();
let sender_address = SuiAddress::from(&keypair.public());
let coins = client.coin_read_api().get_all_coins(sender_address, None, None).await.unwrap();
let coin = coins.data.into_iter().next().unwrap();
println!("{}", sender_address);
let mut ptb = ProgrammableTransactionBuilder::new();
let split_coint_amount = ptb.pure(1000u64).unwrap(); // note that we need to specify the u64 type
ptb.command(Command::SplitCoins(
Argument::GasCoin,
vec![split_coint_amount],
));
let argument_address = ptb.pure(SuiAddress::from_str(RECIPIENT_ADDRESS).unwrap()).unwrap();
ptb.command(Command::TransferObjects(
vec![Argument::Result(0)],
argument_address,
));
let builder = ptb.finish();
let tx_data = TransactionData::new_programmable(
sender_address,
vec![coin.object_ref()],
builder,
5_000_000,
client.read_api().get_reference_gas_price().await.unwrap(),
);
let signature = keypair.sign(tx_data.digest().as_ref());
let transaction = Transaction::from_data(tx_data, vec![signature]);
let bb = client.quorum_driver_api().execute_transaction_block(
transaction,
SuiTransactionBlockResponseOptions::full_content(),
None
).await.unwrap();
println!("{:?}", bb);
Ok(vec![])
}
The signature generated always be invalid, what am I doing wrong?