# Integrate via Smart Contracts
Smart contracts can use the `LinkSigner` transaction type (see [Link Signer](https://docs.nado.xyz/developer-resources/api/gateway/executes/link-signer)) to perform the following:
1. Deposit into Nado.
2. LinkSigner an externally owned account ([EOA](https://ethereum.org/en/developers/docs/accounts/#externally-owned-accounts-and-key-pairs)).
3. Have the externally owned account trade using the smart contract's assets on Nado.
## Setup: Depositing into Nado + Linking an EOA
1. Deposits are always on-chain, as such, users can simply have their smart contract call `depositCollateral` on our `Endpoint` contract (see [Contracts](https://docs.nado.xyz/developer-resources/api/broken-reference) for addresses).
2. The contract needs to have 1 USDT0 available to pay for slow-mode fee and approve the endpoint contract, assemble the bytes for a slow mode linked signer transaction, and submit it via [submitSlowModeTransaction](https://github.com/vertex-protocol/vertex-contracts/blob/1ab8c8ba11e9ddf82c4210a826aad0b899f342aa/contracts/Endpoint.sol#L258).
{% hint style="info" %}
You can find the requisite parsing logic in the [Endpoint](https://github.com/vertex-protocol/vertex-contracts/blob/1ab8c8ba11e9ddf82c4210a826aad0b899f342aa/contracts/Endpoint.sol#L429) contract.
{% endhint %}
### Example
```solidity
struct LinkSigner {
bytes32 sender;
bytes32 signer;
uint64 nonce;
}
function linkNadoSigner(
address nadoEndpoint,
address externalAccount,
address usdt0Address
) external {
// 1. a slow mode fee of 1 USDT0 needs to be avaliable and approved
ERC20 usdt0Token = ERC20(usdt0Address);
// NOTE: should double check the USDT0 decimals in the corresponding chain.
// e.g: it's 1e6 on arbitrum, whereas it's 1e18 on blast, etc.
uint256 SLOW_MODE_FEE = 1e6;
usdt0Token.transferFrom(msg.sender, address(this), SLOW_MODE_FEE);
usdt0Token.approve(nadoEndpoint, SLOW_MODE_FEE);
// 2. assamble the link signer slow mode transaction
bytes12 defaultSubaccountName = bytes12(abi.encodePacked("default"));
bytes32 contractSubaccount = bytes32(
abi.encodePacked(uint160(address(this)), defaultSubaccountName)
);
bytes32 externalSubaccount = bytes32(
uint256(uint160(externalAccount)) << 96
);
LinkSigner memory linkSigner = LinkSigner(
contractSubaccount,
externalSubaccount,
IEndpoint(nadoEndpoint).getNonce(externalAccount)
);
bytes memory txs = abi.encodePacked(
uint8(19),
abi.encode(linkSigner)
);
// 3. submit slow mode transaction
IEndpoint(nadoEndpoint).submitSlowModeTransaction(txs);
}
```
Once the transaction is confirmed, it may take a few seconds for it to make its way into the Nado offchain sequencer. Afterwards, you can sign transactions that have sender `contractSubaccount` using `externalSubaccount`, and they will be accepted by the sequencer and the blockchain.