Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
0c1b219
solana constructor
vaporif Feb 9, 2026
0fd5192
with relayer
vaporif Feb 9, 2026
9d4f836
update
vaporif Feb 10, 2026
a68c325
keystore path
vaporif Feb 10, 2026
41af16d
att
vaporif Feb 10, 2026
a1558b1
hex
vaporif Feb 10, 2026
24f9ebd
translate
vaporif Feb 10, 2026
be2dbbd
cleanups
vaporif Feb 10, 2026
d9d20ed
cleanups
vaporif Feb 10, 2026
2104db6
translator
vaporif Feb 10, 2026
62b45f1
working test
vaporif Feb 11, 2026
67e57af
Merge branch 'main' into vaporif/solidity-solana-constructor
vaporif Feb 15, 2026
0f06418
test lint
vaporif Feb 15, 2026
58686c1
notice
vaporif Feb 15, 2026
b24dc23
post merge
vaporif Feb 15, 2026
7bbd921
post merge
vaporif Feb 15, 2026
1d5c17a
postmerge
vaporif Feb 15, 2026
86f2333
test fix
vaporif Feb 15, 2026
081c60c
fmt
vaporif Feb 15, 2026
da6af63
lint
vaporif Feb 15, 2026
6dd7520
lint
vaporif Feb 15, 2026
460108d
regen
vaporif Feb 16, 2026
2b023c5
post merge fix
vaporif Feb 16, 2026
2a09e1b
post merge cleanup
vaporif Feb 16, 2026
7500772
Merge branch 'main' into vaporif/solidity-solana-constructor
vaporif Feb 16, 2026
e972380
Merge branch 'main' into vaporif/solidity-solana-constructor
vaporif Feb 16, 2026
bf5f9b1
Merge branch 'main' into vaporif/solidity-solana-constructor
vaporif Feb 17, 2026
af04ea4
Merge branch 'main' into vaporif/solidity-solana-constructor
mariuszzak Feb 20, 2026
ffc8389
fix(relayer): align eth-to-solana with IFT refactoring
mariuszzak Feb 20, 2026
58a0a7a
Merge branch 'main' into vaporif/solidity-solana-constructor
mariuszzak Feb 20, 2026
26f4a1d
Merge branch 'main' into vaporif/solidity-solana-constructor
mariuszzak Feb 24, 2026
c9ea1f7
Merge branch 'main' into vaporif/solidity-solana-constructor
mariuszzak Feb 24, 2026
411eeeb
test(e2e): expand Ethereum-Solana IFT test coverage
mariuszzak Feb 24, 2026
f27a498
fix tests
mariuszzak Feb 24, 2026
2daa7bd
fix(relayer): inject attestation proofs into Solana timeout packets
mariuszzak Feb 25, 2026
2f873d1
Merge branch 'main' into vaporif/solidity-solana-constructor
mariuszzak Feb 25, 2026
4ccaede
cargo fmt
mariuszzak Feb 25, 2026
a1642ea
Merge branch 'main' into vaporif/solidity-solana-constructor
mariuszzak Feb 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ members = [
"packages/relayer/modules/eth-to-cosmos-compat",
"packages/relayer/modules/solana-to-cosmos",
"packages/relayer/modules/cosmos-to-solana",
"packages/relayer/modules/eth-to-solana",
"packages/relayer/modules/solana-to-eth",
"packages/sp1-ics07-tendermint-prover",

# Programs (binaries)
Expand Down Expand Up @@ -55,6 +57,8 @@ ibc-eureka-relayer-eth-to-eth = { path = "packages/relayer/modules/eth
ibc-eureka-relayer-cosmos-to-cosmos = { path = "packages/relayer/modules/cosmos-to-cosmos", default-features = false }
ibc-eureka-relayer-solana-to-cosmos = { path = "packages/relayer/modules/solana-to-cosmos", default-features = false }
ibc-eureka-relayer-cosmos-to-solana = { path = "packages/relayer/modules/cosmos-to-solana", default-features = false }
ibc-eureka-relayer-eth-to-solana = { path = "packages/relayer/modules/eth-to-solana", default-features = false }
ibc-eureka-relayer-solana-to-eth = { path = "packages/relayer/modules/solana-to-eth", default-features = false }
ibc-eureka-utils = { path = "packages/utils", default-features = false }
ibc-eureka-constrained-types = { path = "packages/constrained_types", default-features = false }
sp1-ics07-tendermint-prover = { path = "packages/sp1-ics07-tendermint-prover", default-features = false }
Expand Down
2 changes: 1 addition & 1 deletion abi/bytecode/AttestationLightClient.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion abi/bytecode/SP1ICS07Tendermint.json

Large diffs are not rendered by default.

33 changes: 33 additions & 0 deletions contracts/utils/SolanaIFTSendCallConstructor.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

import { IIFTSendCallConstructor } from "../interfaces/IIFTSendCallConstructor.sol";

import { Strings } from "@openzeppelin-contracts/utils/Strings.sol";
import { ERC165 } from "@openzeppelin-contracts/utils/introspection/ERC165.sol";
import { IERC165 } from "@openzeppelin-contracts/utils/introspection/IERC165.sol";

/// @title Solana IFT Send Call Constructor
/// @notice Constructs ICS27-GMP call data for minting IFT tokens on Solana counterparty chains
contract SolanaIFTSendCallConstructor is IIFTSendCallConstructor, ERC165 {
/// @notice Expected length of a 0x-prefixed hex-encoded Solana public key (2 + 64)
uint256 private constant SOLANA_PUBKEY_HEX_LENGTH = 66;

/// @notice Error thrown when the receiver address is invalid
/// @param receiver The invalid receiver string
error SolanaIFTInvalidReceiver(string receiver);

/// @inheritdoc IIFTSendCallConstructor
function constructMintCall(string calldata receiver, uint256 amount) external pure returns (bytes memory) {
require(bytes(receiver).length == SOLANA_PUBKEY_HEX_LENGTH, SolanaIFTInvalidReceiver(receiver));
(bool success, uint256 parsed) = Strings.tryParseHexUint(receiver);
require(success, SolanaIFTInvalidReceiver(receiver));

return abi.encode(bytes32(parsed), amount);
}

/// @inheritdoc ERC165
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return interfaceId == type(IIFTSendCallConstructor).interfaceId || super.supportsInterface(interfaceId);
}
}
1 change: 1 addition & 0 deletions e2e/interchaintestv8/ethereum/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ type DeployedContracts struct {
Ift string `json:"ift,omitempty"`
// CosmosIFTSendCallConstructor (optional, deployed when IFT_ICA_ADDRESS is set)
CosmosIftConstructor string `json:"cosmosIftConstructor,omitempty"`
SolanaIftConstructor string `json:"solanaIftConstructor,omitempty"`
}

// GetVerifierAddress returns the appropriate verifier address based on prover type and proof type.
Expand Down
Loading
Loading