Thank you. We'll be in touch.
Oops! Something went wrong while submitting the form.

Turn your

blockchain into a

multichain hub

Transactions across multiple blockchains should be as easy and secure as those on a single chain.

INTEROPERABLE
EASY TO USE
SCALABLE

t3rn creates frictionless multichain smart contract execution, that's accountable, scalable, and completely trust-free for investors, users, and developers.

01
02
03

Interoperability for platforms

t3rn supports the interoperable systems that a multichain future will be built on, offering simple and seamless integration with any blockchain

Develop with us

Reversibility
for users

t3rn offers fail-safe, multi-chain smart contract execution, reversing failed transactions in a multi-step execution, ensuring that funds are never lost or stuck

Join the Community

Composability for developers

Open-source code is deployed with full on-chain provenance, ensuring original authors of the code can get paid every time their code executes

More info

Interoperability for platforms

t3rn intelligently supports the interoperable systems that the multichain future will be built on by working intellligently with any cross-chain transaction.

Develop with us

Reversibility for users

t3rn smart contract hubs have built-in fail safes that reverse failed transactions to their last secure point, ensuring that funds arent't lost.

Develop with us

Composability for developers

Open-source code depolyed with full on-chain provenance, allowing original authors to get paid every time their code executes.

Develop with us
01

Limitless Defi

Defi should never be limited to one blockchain, t3rn makes multichain defi not only possible, but highly secure too.

Learn more
02

On-chain Smart Contract Repository

Anyone can use the smart contracts stored in our open-source registry or get paid whenever a smart contract you upload is used.

Smart contracts can be uploaded as they are, in familiar languages like Solidity, ink!, WebAssembly or anything that compiles to WASM.

Learn more
03

Setting cross-chain standards (XBI)

The Web3 Foundation commissioned t3rn to build XBI, an easy-to-use standard for cross-chain messaging.

Learn more

#RegisterSmartContract {
  onEscrowTransferReceived(|user, btc_swap_amount|) => Result<StepState, Error> 
  {
     let price = 3rdPartyOracle::get_price("BTC/ETH");
     let btc = price * btc_swap_amount;
     let eth = Interlay::escrow_swap("BTC/ETH", btc, self.owner);
     let gno = Ethereum::uniswap::swap("ETH/GNO", eth, self.owner);
     Gnosis::transfer(mark, user, gno)
     Ok(())
  };
};


#[ink::contract]
mod get_best_price_from_oracles {
    use t3rn_sdk::{
        Chain::{Ethereum, Polygon, Gnosis},
        GlobalTypes::{Balance},
        Operation::{AddLiquidity, Assets, CallEvm, CallWasm, Swap, Transfer},
   };

    #[ink(storage)]
    pub struct MyPriceSearchContract {}

    impl MyPriceSearchContract {
        #[ink(message, payable)]
        pub fn on_transfer_received(&mut self, state: Option<State>, eth: Balance) {
            let usdc_price_ethereum = Ethereum::uniswap::get_price("BTC/USDC");
            let usdc_price_polygon = Polygon::uniswap::get_price("BTC/USDC");
            let usdc_price_gnosis = Gnosis::uniswap::get_price("BTC/USDC");

            if usdc_price_ethereum < usdc_price_polygon && usdc_price_ethereum < usdc_price_gnosis {
                let usdc = Ethereum::uniswap::swap("ETH/USDC", eth, self.owner);
                Ethereum::transfer(self.owner, usdc);
            } else if usdc_price_gnosis < usdc_price_polygon && usdc_price_gnosis < usdc_price_ethereum {
                let usdc = Gnosis::uniswap::swap("ETH/USDC", eth, self.owner);
                Gnosis::transfer(self.owner, usdc);
            } else {
                let usdc = Polygon::uniswap::swap("ETH/USDC", eth, self.owner);
                Polygon::transfer(self.owner, usdc);
            }
       }
    }
}


let para_id = 2001;
let uniswap_clone_addr = hex_literal::hex!("4f6a1caa01161180582092ecfac2502b").into();
let call = Call:Evm {
  caller: callee,
  dest: uniswap_clone_addr,
  value,
  input: ["swap", "DOT", "TRN", self.callee],
  gas_limit,
  ..Default::default()
};

let asset_id = XDOT::get_id();
let xbi_call = XBI::new()
  .with_call(para_id, call)
  .with_timeout_blocks(50)
  .with_max_execution_cost(10_000_000_000)
  .with_execution_asset(asset_id)
  .build();

let asset_id: u32 = 0;
let xbi_call = XBI::new()
   .with_withdraw_asset(Some(asset_id), 1_000_000_000_000)
   .with_buy_execution(Some(asset_id), 1_000_000_000_000)
   .with_transact(
       Some(1_000_000_000),
       init_open_channel_req(parachain, None, None, Some(relaychain_meta)),
   )
   .with_refund_surplus()
   .with_deposit_asset(Some(asset_id), 1, id_shadow)
   .build();


#RegisterSmartContract {
  onEscrowTransferReceived(|user, btc_swap_amount|) => Result<StepState, Error> {
     let price = 3rdPartyOracle::get_price("BTC/ETH");
     let btc = price * btc_swap_amount;
     let eth = Interlay::escrow_swap("BTC/ETH", btc, self.owner);
     let gno = Ethereum::uniswap::swap("ETH/GNO", eth, self.owner);
     Gnosis::transfer(mark, user, gno)
     Ok(())
  };
};

Limitless Defi

Defi should never be limited to one blockchain, t3rn makes multichain defi possible.

Learn more

#[ink::contract]
mod get_best_price_from_oracles {
    use t3rn_sdk::{
        Chain::{Ethereum, Polygon, Gnosis},
        GlobalTypes::{Balance},
        Operation::{AddLiquidity, Assets, CallEvm, CallWasm, Swap, Transfer},
   };

    #[ink(storage)]
    pub struct MyPriceSearchContract {}

    impl MyPriceSearchContract {
        #[ink(message, payable)]
        pub fn on_transfer_received(&mut self, state: Option<State>, eth: Balance) {
            let usdc_price_ethereum = Ethereum::uniswap::get_price("BTC/USDC");
            let usdc_price_polygon = Polygon::uniswap::get_price("BTC/USDC");
            let usdc_price_gnosis = Gnosis::uniswap::get_price("BTC/USDC");

            if usdc_price_ethereum < usdc_price_polygon && usdc_price_ethereum < usdc_price_gnosis {
                let usdc = Ethereum::uniswap::swap("ETH/USDC", eth, self.owner);
                Ethereum::transfer(self.owner, usdc);
            } else if usdc_price_gnosis < usdc_price_polygon && usdc_price_gnosis < usdc_price_ethereum {
                let usdc = Gnosis::uniswap::swap("ETH/USDC", eth, self.owner);
                Gnosis::transfer(self.owner, usdc);
            } else {
                let usdc = Polygon::uniswap::swap("ETH/USDC", eth, self.owner);
                Polygon::transfer(self.owner, usdc);
            }
       }
    }
}

On-chain Smart Contract Repository

Anyone can use the smart contracts stored in our open-source registry or get paid whenever a smart contract you upload is used.

Learn more

let para_id = 2001;
let uniswap_clone_addr = hex_literal::hex!("4f6a1caa01161180582092ecfac2502b").into();
let call = Call:Evm {
  caller: callee,
  dest: uniswap_clone_addr,
  value,
  input: ["swap", "DOT", "TRN", self.callee],
  gas_limit,
  ..Default::default()
};

let asset_id = XDOT::get_id();
let xbi_call = XBI::new()
  .with_call(para_id, call)
  .with_timeout_blocks(50)
  .with_max_execution_cost(10_000_000_000)
  .with_execution_asset(asset_id)
  .build();

let asset_id: u32 = 0;
let xbi_call = XBI::new()
   .with_withdraw_asset(Some(asset_id), 1_000_000_000_000)
   .with_buy_execution(Some(asset_id), 1_000_000_000_000)
   .with_transact(
       Some(1_000_000_000),
       init_open_channel_req(parachain, None, None, Some(relaychain_meta)),
   )
   .with_refund_surplus()
   .with_deposit_asset(Some(asset_id), 1, id_shadow)
   .build();

Setting cross-chain standards (XBI)

The Web3 Foundation commissioned t3rn to build XBI, an easy-to-use standard for cross-chain messaging.

Learn more

Building Together

Blog