|
|
@@ -1,7 +1,17 @@
|
|
|
#![allow(warnings)]
|
|
|
|
|
|
use borsh::BorshSerialize;
|
|
|
-use secp256k1::Message;
|
|
|
+use byteorder::{
|
|
|
+ BigEndian,
|
|
|
+ WriteBytesExt,
|
|
|
+};
|
|
|
+use hex_literal::hex;
|
|
|
+use secp256k1::{
|
|
|
+ Message,
|
|
|
+ PublicKey,
|
|
|
+ SecretKey,
|
|
|
+};
|
|
|
+use sha3::Digest;
|
|
|
use solana_client::rpc_client::RpcClient;
|
|
|
use solana_program::{
|
|
|
borsh::try_from_slice_unchecked,
|
|
|
@@ -27,27 +37,17 @@ use solana_sdk::{
|
|
|
},
|
|
|
transaction::Transaction,
|
|
|
};
|
|
|
-use byteorder::{
|
|
|
- BigEndian,
|
|
|
- WriteBytesExt,
|
|
|
-};
|
|
|
use std::{
|
|
|
convert::TryInto,
|
|
|
io::{
|
|
|
Cursor,
|
|
|
Write,
|
|
|
},
|
|
|
+ time::{
|
|
|
+ Duration,
|
|
|
+ SystemTime,
|
|
|
+ },
|
|
|
};
|
|
|
-use std::time::{
|
|
|
- Duration,
|
|
|
- SystemTime,
|
|
|
-};
|
|
|
-use hex_literal::hex;
|
|
|
-use secp256k1::{
|
|
|
- PublicKey,
|
|
|
- SecretKey,
|
|
|
-};
|
|
|
-use sha3::Digest;
|
|
|
|
|
|
use bridge::{
|
|
|
accounts::GuardianSetDerivationData,
|
|
|
@@ -66,14 +66,15 @@ use bridge::{
|
|
|
SerializePayload,
|
|
|
Signature,
|
|
|
};
|
|
|
+use primitive_types::U256;
|
|
|
|
|
|
mod common;
|
|
|
|
|
|
const GOV_KEY: [u8; 64] = [
|
|
|
- 240, 133, 120, 113, 30, 67, 38, 184, 197, 72, 234, 99, 241, 21, 58, 225, 41, 157, 171, 44,
|
|
|
- 196, 163, 134, 236, 92, 148, 110, 68, 127, 114, 177, 0, 173, 253, 199, 9, 242, 142, 201,
|
|
|
- 174, 108, 197, 18, 102, 115, 0, 31, 205, 127, 188, 191, 56, 171, 228, 20, 247, 149, 170,
|
|
|
- 141, 231, 147, 88, 97, 199,
|
|
|
+ 240, 133, 120, 113, 30, 67, 38, 184, 197, 72, 234, 99, 241, 21, 58, 225, 41, 157, 171, 44, 196,
|
|
|
+ 163, 134, 236, 92, 148, 110, 68, 127, 114, 177, 0, 173, 253, 199, 9, 242, 142, 201, 174, 108,
|
|
|
+ 197, 18, 102, 115, 0, 31, 205, 127, 188, 191, 56, 171, 228, 20, 247, 149, 170, 141, 231, 147,
|
|
|
+ 88, 97, 199,
|
|
|
];
|
|
|
|
|
|
struct Context {
|
|
|
@@ -109,7 +110,17 @@ fn test_bridge_messages(context: &mut Context) {
|
|
|
let emitter = Keypair::new();
|
|
|
|
|
|
// Post the message, publishing the data for guardian consumption.
|
|
|
- let message_key = common::post_message(client, program, payer, &emitter, nonce, message.clone(), 10_000).unwrap();
|
|
|
+ let message_key = common::post_message(
|
|
|
+ client,
|
|
|
+ program,
|
|
|
+ payer,
|
|
|
+ &emitter,
|
|
|
+ nonce,
|
|
|
+ message.clone(),
|
|
|
+ 10_000,
|
|
|
+ false,
|
|
|
+ )
|
|
|
+ .unwrap();
|
|
|
|
|
|
// Emulate Guardian behaviour, verifying the data and publishing signatures/VAA.
|
|
|
let (vaa, body, body_hash) = common::generate_vaa(&emitter, message.clone(), nonce, 0);
|
|
|
@@ -127,7 +138,17 @@ fn test_guardian_set_change(context: &mut Context) {
|
|
|
let emitter = Keypair::from_bytes(&GOV_KEY).unwrap();
|
|
|
|
|
|
// Post the message, publishing the data for guardian consumption.
|
|
|
- let message_key = common::post_message(client, program, payer, &emitter, nonce, message.clone(), 10_000).unwrap();
|
|
|
+ let message_key = common::post_message(
|
|
|
+ client,
|
|
|
+ program,
|
|
|
+ payer,
|
|
|
+ &emitter,
|
|
|
+ nonce,
|
|
|
+ message.clone(),
|
|
|
+ 10_000,
|
|
|
+ false,
|
|
|
+ )
|
|
|
+ .unwrap();
|
|
|
|
|
|
// Emulate Guardian behaviour, verifying the data and publishing signatures/VAA.
|
|
|
let (vaa, body, body_hash) = common::generate_vaa(&emitter, message.clone(), nonce, 0);
|
|
|
@@ -141,9 +162,21 @@ fn test_guardian_set_change(context: &mut Context) {
|
|
|
let message = GovernancePayloadGuardianSetChange {
|
|
|
new_guardian_set_index: 1,
|
|
|
new_guardian_set: new_public_keys.clone(),
|
|
|
- }.try_to_vec().unwrap();
|
|
|
+ }
|
|
|
+ .try_to_vec()
|
|
|
+ .unwrap();
|
|
|
|
|
|
- let message_key = common::post_message(client, program, payer, &emitter, nonce, message.clone(), 10_000).unwrap();
|
|
|
+ let message_key = common::post_message(
|
|
|
+ client,
|
|
|
+ program,
|
|
|
+ payer,
|
|
|
+ &emitter,
|
|
|
+ nonce,
|
|
|
+ message.clone(),
|
|
|
+ 10_000,
|
|
|
+ false,
|
|
|
+ )
|
|
|
+ .unwrap();
|
|
|
let (vaa, body, body_hash) = common::generate_vaa(&emitter, message.clone(), nonce, 0);
|
|
|
common::verify_signatures(client, program, payer, body, body_hash, &context.secret, 0).unwrap();
|
|
|
common::post_vaa(client, program, payer, vaa).unwrap();
|
|
|
@@ -157,11 +190,22 @@ fn test_guardian_set_change(context: &mut Context) {
|
|
|
0,
|
|
|
1,
|
|
|
1,
|
|
|
- ).unwrap();
|
|
|
+ )
|
|
|
+ .unwrap();
|
|
|
|
|
|
// Submit the message a second time with a new nonce.
|
|
|
let nonce = 12399;
|
|
|
- let message_key = common::post_message(client, program, payer, &emitter, nonce, message.clone(), 10_000).unwrap();
|
|
|
+ let message_key = common::post_message(
|
|
|
+ client,
|
|
|
+ program,
|
|
|
+ payer,
|
|
|
+ &emitter,
|
|
|
+ nonce,
|
|
|
+ message.clone(),
|
|
|
+ 10_000,
|
|
|
+ false,
|
|
|
+ )
|
|
|
+ .unwrap();
|
|
|
|
|
|
context.public = new_public_keys;
|
|
|
context.secret = new_secret_keys;
|
|
|
@@ -183,9 +227,21 @@ fn test_guardian_set_change_fails(context: &mut Context) {
|
|
|
let message = GovernancePayloadGuardianSetChange {
|
|
|
new_guardian_set_index: 2,
|
|
|
new_guardian_set: new_public_keys.clone(),
|
|
|
- }.try_to_vec().unwrap();
|
|
|
+ }
|
|
|
+ .try_to_vec()
|
|
|
+ .unwrap();
|
|
|
|
|
|
- let message_key = common::post_message(client, program, payer, &emitter, nonce, message.clone(), 10_000).unwrap();
|
|
|
+ let message_key = common::post_message(
|
|
|
+ client,
|
|
|
+ program,
|
|
|
+ payer,
|
|
|
+ &emitter,
|
|
|
+ nonce,
|
|
|
+ message.clone(),
|
|
|
+ 10_000,
|
|
|
+ false,
|
|
|
+ )
|
|
|
+ .unwrap();
|
|
|
let (vaa, body, body_hash) = common::generate_vaa(&emitter, message.clone(), nonce, 1);
|
|
|
|
|
|
assert!(common::upgrade_guardian_set(
|
|
|
@@ -197,7 +253,8 @@ fn test_guardian_set_change_fails(context: &mut Context) {
|
|
|
1,
|
|
|
2,
|
|
|
0,
|
|
|
- ).is_err());
|
|
|
+ )
|
|
|
+ .is_err());
|
|
|
}
|
|
|
|
|
|
fn test_set_fees(context: &mut Context) {
|
|
|
@@ -206,9 +263,12 @@ fn test_set_fees(context: &mut Context) {
|
|
|
let emitter = Keypair::from_bytes(&GOV_KEY).unwrap();
|
|
|
|
|
|
let nonce = 12401;
|
|
|
- let message = GovernancePayloadSetMessageFee { fee: 100 }
|
|
|
- .try_to_vec()
|
|
|
- .unwrap();
|
|
|
+ let message = GovernancePayloadSetMessageFee {
|
|
|
+ fee: U256::from(100),
|
|
|
+ persisted_fee: U256::from(100),
|
|
|
+ }
|
|
|
+ .try_to_vec()
|
|
|
+ .unwrap();
|
|
|
|
|
|
let message_key = common::post_message(
|
|
|
client,
|
|
|
@@ -218,6 +278,7 @@ fn test_set_fees(context: &mut Context) {
|
|
|
nonce,
|
|
|
message.clone(),
|
|
|
10_000,
|
|
|
+ false,
|
|
|
)
|
|
|
.unwrap();
|
|
|
let (vaa, body, body_hash) = common::generate_vaa(&emitter, message.clone(), nonce, 1);
|
|
|
@@ -229,13 +290,31 @@ fn test_set_fees(context: &mut Context) {
|
|
|
let emitter = Keypair::new();
|
|
|
let nonce = 12402;
|
|
|
let message = b"Fail to Pay".to_vec();
|
|
|
- assert!(
|
|
|
- common::post_message(client, program, payer, &emitter, nonce, message.clone(), 50).is_err()
|
|
|
- );
|
|
|
+ assert!(common::post_message(
|
|
|
+ client,
|
|
|
+ program,
|
|
|
+ payer,
|
|
|
+ &emitter,
|
|
|
+ nonce,
|
|
|
+ message.clone(),
|
|
|
+ 50,
|
|
|
+ false
|
|
|
+ )
|
|
|
+ .is_err());
|
|
|
|
|
|
// And succeeds with the new.
|
|
|
let emitter = Keypair::new();
|
|
|
let nonce = 12402;
|
|
|
let message = b"Fail to Pay".to_vec();
|
|
|
- common::post_message(client, program, payer, &emitter, nonce, message.clone(), 100).unwrap();
|
|
|
+ common::post_message(
|
|
|
+ client,
|
|
|
+ program,
|
|
|
+ payer,
|
|
|
+ &emitter,
|
|
|
+ nonce,
|
|
|
+ message.clone(),
|
|
|
+ 100,
|
|
|
+ false,
|
|
|
+ )
|
|
|
+ .unwrap();
|
|
|
}
|