Skip to content

Commit d4f879b

Browse files
committed
chore(solana): storge the deserialized Message in IncomingMessage account
1 parent 9da9a06 commit d4f879b

12 files changed

Lines changed: 623 additions & 346 deletions

File tree

solana/idl.ts

Lines changed: 285 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,80 @@ export const IDL = {
740740
]
741741
}
742742
},
743+
{
744+
"name": "FinalizeBridgeSol",
745+
"type": {
746+
"kind": "struct",
747+
"fields": [
748+
{
749+
"name": "remote_token",
750+
"type": {
751+
"array": [
752+
"u8",
753+
20
754+
]
755+
}
756+
},
757+
{
758+
"name": "to",
759+
"type": "pubkey"
760+
},
761+
{
762+
"name": "amount",
763+
"type": "u64"
764+
}
765+
]
766+
}
767+
},
768+
{
769+
"name": "FinalizeBridgeSpl",
770+
"type": {
771+
"kind": "struct",
772+
"fields": [
773+
{
774+
"name": "remote_token",
775+
"type": {
776+
"array": [
777+
"u8",
778+
20
779+
]
780+
}
781+
},
782+
{
783+
"name": "local_token",
784+
"type": "pubkey"
785+
},
786+
{
787+
"name": "to",
788+
"type": "pubkey"
789+
},
790+
{
791+
"name": "amount",
792+
"type": "u64"
793+
}
794+
]
795+
}
796+
},
797+
{
798+
"name": "FinalizeBridgeWrappedToken",
799+
"type": {
800+
"kind": "struct",
801+
"fields": [
802+
{
803+
"name": "local_token",
804+
"type": "pubkey"
805+
},
806+
{
807+
"name": "to",
808+
"type": "pubkey"
809+
},
810+
{
811+
"name": "amount",
812+
"type": "u64"
813+
}
814+
]
815+
}
816+
},
743817
{
744818
"name": "IncomingMessage",
745819
"type": {
@@ -755,8 +829,12 @@ export const IDL = {
755829
}
756830
},
757831
{
758-
"name": "data",
759-
"type": "bytes"
832+
"name": "message",
833+
"type": {
834+
"defined": {
835+
"name": "bridge::base_to_solana::state::incoming_message::Message"
836+
}
837+
}
760838
},
761839
{
762840
"name": "executed",
@@ -766,29 +844,77 @@ export const IDL = {
766844
}
767845
},
768846
{
769-
"name": "Message",
847+
"name": "Ix",
848+
"docs": [
849+
"Instruction to be executed by the wallet.",
850+
"Functionally equivalent to a Solana Instruction."
851+
],
770852
"type": {
771-
"kind": "enum",
772-
"variants": [
853+
"kind": "struct",
854+
"fields": [
773855
{
774-
"name": "Call",
775-
"fields": [
776-
{
856+
"name": "program_id",
857+
"docs": [
858+
"Program that will process this instruction."
859+
],
860+
"type": "pubkey"
861+
},
862+
{
863+
"name": "accounts",
864+
"docs": [
865+
"Accounts required for this instruction."
866+
],
867+
"type": {
868+
"vec": {
777869
"defined": {
778-
"name": "Call"
870+
"name": "IxAccount"
779871
}
780872
}
781-
]
873+
}
782874
},
783875
{
784-
"name": "Transfer",
785-
"fields": [
786-
{
787-
"defined": {
788-
"name": "Transfer"
789-
}
876+
"name": "data",
877+
"docs": [
878+
"Instruction data."
879+
],
880+
"type": "bytes"
881+
}
882+
]
883+
}
884+
},
885+
{
886+
"name": "IxAccount",
887+
"docs": [
888+
"Account used in an instruction.",
889+
"Identical to Solana's AccountMeta but implements AnchorSerialize and AnchorDeserialize."
890+
],
891+
"type": {
892+
"kind": "struct",
893+
"fields": [
894+
{
895+
"name": "pubkey_or_pda",
896+
"docs": [
897+
"Public key of the account."
898+
],
899+
"type": {
900+
"defined": {
901+
"name": "PubkeyOrPda"
790902
}
791-
]
903+
}
904+
},
905+
{
906+
"name": "is_writable",
907+
"docs": [
908+
"Whether the account is writable."
909+
],
910+
"type": "bool"
911+
},
912+
{
913+
"name": "is_signer",
914+
"docs": [
915+
"Whether the account is a signer."
916+
],
917+
"type": "bool"
792918
}
793919
]
794920
}
@@ -814,7 +940,7 @@ export const IDL = {
814940
"name": "message",
815941
"type": {
816942
"defined": {
817-
"name": "Message"
943+
"name": "bridge::solana_to_base::state::outgoing_message::Message"
818944
}
819945
}
820946
}
@@ -895,7 +1021,145 @@ export const IDL = {
8951021
}
8961022
},
8971023
{
898-
"name": "Transfer",
1024+
"name": "PubkeyOrPda",
1025+
"type": {
1026+
"kind": "enum",
1027+
"variants": [
1028+
{
1029+
"name": "Pubkey",
1030+
"fields": [
1031+
"pubkey"
1032+
]
1033+
},
1034+
{
1035+
"name": "PDA",
1036+
"fields": [
1037+
{
1038+
"name": "seeds",
1039+
"type": {
1040+
"vec": "bytes"
1041+
}
1042+
},
1043+
{
1044+
"name": "program_id",
1045+
"type": "pubkey"
1046+
}
1047+
]
1048+
}
1049+
]
1050+
}
1051+
},
1052+
{
1053+
"name": "bridge::base_to_solana::state::incoming_message::Message",
1054+
"type": {
1055+
"kind": "enum",
1056+
"variants": [
1057+
{
1058+
"name": "Call",
1059+
"fields": [
1060+
{
1061+
"vec": {
1062+
"defined": {
1063+
"name": "Ix"
1064+
}
1065+
}
1066+
}
1067+
]
1068+
},
1069+
{
1070+
"name": "Transfer",
1071+
"fields": [
1072+
{
1073+
"name": "transfer",
1074+
"type": {
1075+
"defined": {
1076+
"name": "bridge::base_to_solana::state::incoming_message::Transfer"
1077+
}
1078+
}
1079+
},
1080+
{
1081+
"name": "ixs",
1082+
"type": {
1083+
"vec": {
1084+
"defined": {
1085+
"name": "Ix"
1086+
}
1087+
}
1088+
}
1089+
}
1090+
]
1091+
}
1092+
]
1093+
}
1094+
},
1095+
{
1096+
"name": "bridge::base_to_solana::state::incoming_message::Transfer",
1097+
"type": {
1098+
"kind": "enum",
1099+
"variants": [
1100+
{
1101+
"name": "Sol",
1102+
"fields": [
1103+
{
1104+
"defined": {
1105+
"name": "FinalizeBridgeSol"
1106+
}
1107+
}
1108+
]
1109+
},
1110+
{
1111+
"name": "Spl",
1112+
"fields": [
1113+
{
1114+
"defined": {
1115+
"name": "FinalizeBridgeSpl"
1116+
}
1117+
}
1118+
]
1119+
},
1120+
{
1121+
"name": "WrappedToken",
1122+
"fields": [
1123+
{
1124+
"defined": {
1125+
"name": "FinalizeBridgeWrappedToken"
1126+
}
1127+
}
1128+
]
1129+
}
1130+
]
1131+
}
1132+
},
1133+
{
1134+
"name": "bridge::solana_to_base::state::outgoing_message::Message",
1135+
"type": {
1136+
"kind": "enum",
1137+
"variants": [
1138+
{
1139+
"name": "Call",
1140+
"fields": [
1141+
{
1142+
"defined": {
1143+
"name": "Call"
1144+
}
1145+
}
1146+
]
1147+
},
1148+
{
1149+
"name": "Transfer",
1150+
"fields": [
1151+
{
1152+
"defined": {
1153+
"name": "bridge::solana_to_base::state::outgoing_message::Transfer"
1154+
}
1155+
}
1156+
]
1157+
}
1158+
]
1159+
}
1160+
},
1161+
{
1162+
"name": "bridge::solana_to_base::state::outgoing_message::Transfer",
8991163
"type": {
9001164
"kind": "struct",
9011165
"fields": [
@@ -983,7 +1247,7 @@ export const IDL = {
9831247
{
9841248
"name": "GAS_FEE_RECEIVER",
9851249
"type": "pubkey",
986-
"value": "4vTj5kmBrmds3zWogiyUxtZPggcVUmG44EXRy2CxTcEZ"
1250+
"value": "eEwCrQLBdQchykrkYitkYUZskd7MPrU2YxBXcPDPnMt"
9871251
},
9881252
{
9891253
"name": "INCOMING_MESSAGE_SEED",
@@ -1053,7 +1317,7 @@ export const IDL = {
10531317
{
10541318
"name": "TRUSTED_ORACLE",
10551319
"type": "pubkey",
1056-
"value": "4vTj5kmBrmds3zWogiyUxtZPggcVUmG44EXRy2CxTcEZ"
1320+
"value": "eEwCrQLBdQchykrkYitkYUZskd7MPrU2YxBXcPDPnMt"
10571321
},
10581322
{
10591323
"name": "WRAPPED_TOKEN_SEED",

solana/programs/bridge/src/base_to_solana/instructions/prove_message.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::base_to_solana::{
44
constants::INCOMING_MESSAGE_SEED,
55
internal::mmr::{self, Proof},
66
state::{IncomingMessage, OutputRoot},
7+
Message,
78
};
89

910
#[derive(Accounts)]
@@ -47,7 +48,7 @@ pub fn prove_message_handler(
4748
*ctx.accounts.message = IncomingMessage {
4849
executed: false,
4950
sender,
50-
data,
51+
message: Message::try_from_slice(&data)?,
5152
};
5253

5354
Ok(())

solana/programs/bridge/src/base_to_solana/instructions/relay_message.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub fn relay_message_handler<'a, 'info>(
2424
RelayMessageError::AlreadyExecuted
2525
);
2626

27-
let message = Message::try_from_slice(&ctx.accounts.message.data)?;
27+
let message = ctx.accounts.message.message.clone();
2828
let (transfer, ixs) = match message {
2929
Message::Call(ixs) => (None, ixs),
3030
Message::Transfer { transfer, ixs } => (Some(transfer), ixs),

0 commit comments

Comments
 (0)