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. Welcome to t3rn

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 intelligently supports the interoperable systems that the multichain future will be built on by working intellligently with any multichain 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.

Join the Community

Composability for developers

Open-source code deployed with full on-chain provenance, allowing original authors to 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 possible.

02

On-chain Smart Contract Repository Helps Developers Thrive

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.

03

Setting cross-chain standards (XBI)

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


#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.


#[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.


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.

Building Together

Collectively shaping the
multichain future.

Hide All Collaborators

Blog