Интеграция с NEAR Chain Signatures
NEAR Chain Signatures — принципиально иной подход к кросс-чейн взаимодействию. Вместо специализированных bridge контрактов на каждой цепи, Chain Signatures позволяет NEAR аккаунту подписывать транзакции для любой цепи: Ethereum, Bitcoin, Solana, Dogecoin — без деплоя чего-либо на этих цепях.
Принцип работы
В основе — MPC (Multi-Party Computation) сеть из NEAR валидаторов, которые коллективно хранят master key. Пользователь запрашивает подпись транзакции для другой цепи, MPC сеть генерирует подпись через threshold cryptography. Результирующая подпись — валидная подпись для целевой цепи, которую можно broadcast-ить.
Это означает: ваш NEAR аккаунт может контролировать Bitcoin адрес, Ethereum адрес, Solana адрес — без seed phrase для каждого. Один NEAR аккаунт = доступ ко всем активам на всех цепях.
NEAR Account (alice.near)
├── Controls ETH address: 0x1234... (secp256k1 derived key)
├── Controls BTC address: bc1q... (secp256k1 derived key)
└── Controls SOL address: ABC... (ed25519 derived key)
Derivation paths
Каждый NEAR аккаунт может получить несколько адресов на внешних цепях через derivation path:
// alice.near с path "eth-1" → один ETH адрес
// alice.near с path "eth-2" → другой ETH адрес
// alice.near с path "btc-main" → BTC адрес
Это позволяет одному NEAR аккаунту управлять множеством адресов-кошельков на разных цепях.
Запрос подписи
import { connect, KeyPair, utils } from "near-api-js";
import { CONTRACT_ID } from "./constants";
// Запрос подписи ETH транзакции от MPC сети
async function requestEthSignature(
nearAccount: Account,
ethTxPayload: string, // RLP-encoded unsigned transaction
derivationPath: string
): Promise<{ r: string; s: string; v: number }> {
const result = await nearAccount.functionCall({
contractId: "v1.signer.near", // MPC контракт
methodName: "sign",
args: {
payload: Array.from(Buffer.from(ethTxPayload, "hex")),
path: derivationPath,
key_version: 0,
},
gas: "300000000000000", // 300 TGas
attachedDeposit: utils.format.parseNearAmount("0.1"), // оплата MPC
});
// Результат содержит ECDSA подпись
const { big_r, s, recovery_id } = result as any;
return {
r: big_r.affine_point,
s: s.scalar,
v: recovery_id,
};
}
Полный флоу: NEAR → Ethereum транзакция
import { ethers } from "ethers";
async function sendEthFromNear(
nearAccount: Account,
recipient: string,
amountWei: bigint,
derivationPath: string
) {
// 1. Получаем наш Ethereum адрес (производный от NEAR аккаунта)
const ethAddress = await getEthAddressFromNear(nearAccount, derivationPath);
// 2. Получаем nonce и gas price для Ethereum
const provider = new ethers.JsonRpcProvider("https://eth.llamarpc.com");
const nonce = await provider.getTransactionCount(ethAddress);
const feeData = await provider.getFeeData();
// 3. Создаём unsigned транзакцию
const tx = {
to: recipient,
value: amountWei,
nonce,
chainId: 1,
maxFeePerGas: feeData.maxFeePerGas,
maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,
gasLimit: 21000n,
type: 2,
};
// 4. Сериализуем для подписи
const serialized = ethers.Transaction.from(tx).unsignedSerialized;
const payload = ethers.getBytes(ethers.keccak256(serialized));
// 5. Запрашиваем подпись у MPC сети через NEAR
const signature = await requestEthSignature(
nearAccount,
Buffer.from(payload).toString("hex"),
derivationPath
);
// 6. Собираем подписанную транзакцию
const signedTx = ethers.Transaction.from({
...tx,
signature: {
r: "0x" + signature.r,
s: "0x" + signature.s,
v: signature.v,
},
});
// 7. Broadcast на Ethereum
const txResponse = await provider.broadcastTransaction(signedTx.serialized);
return txResponse.wait();
}
Bitcoin интеграция
Chain Signatures поддерживает Bitcoin (secp256k1 + P2WPKH/P2TR). Это уникальная возможность: большинство других cross-chain протоколов не поддерживают Bitcoin нативно.
import * as bitcoin from "bitcoinjs-lib";
async function sendBitcoinFromNear(
nearAccount: Account,
recipient: string,
satoshis: number,
derivationPath: string
) {
const network = bitcoin.networks.bitcoin;
const btcAddress = await getBtcAddressFromNear(nearAccount, derivationPath);
// Получаем UTXOs
const utxos = await fetchUTXOs(btcAddress);
// Строим PSBT
const psbt = new bitcoin.Psbt({ network });
for (const utxo of utxos) {
psbt.addInput({ hash: utxo.txid, index: utxo.vout, witnessUtxo: utxo.witnessUtxo });
}
psbt.addOutput({ address: recipient, value: satoshis });
// Change output...
// Для каждого input запрашиваем подпись у MPC
for (let i = 0; i < utxos.length; i++) {
const sighash = psbt.data.inputs[i].sighashType ?? bitcoin.Transaction.SIGHASH_ALL;
const hash = psbt.__CACHE.__TX.hashForWitnessV0(i, psbt.data.inputs[i].witnessScript!, utxos[i].value, sighash);
const signature = await requestBtcSignature(
nearAccount,
hash.toString("hex"),
derivationPath
);
psbt.finalizeInput(i, /* custom finalizer with MPC signature */);
}
const rawTx = psbt.extractTransaction().toHex();
return broadcastBitcoin(rawTx);
}
Варианты применения
Omnichein DeFi. dApp на NEAR, который управляет позициями на Ethereum AAVE, Uniswap, GMX без bridge. Пользователь взаимодействует только с NEAR (дёшево, быстро), Chain Signatures исполняет действия на Ethereum.
Cross-chain liquidation bot. Мониторинг позиций на нескольких цепях, автоматическая ликвидация с использованием Chain Signatures для подписи транзакций без предзагрузки ETH на executor адрес.
Multi-chain portfolio management. Управление активами на Ethereum, Bitcoin, Solana из одного NEAR аккаунта.
Atomic swaps без bridge. ETH ↔ BTC без centralized exchange, с on-chain гарантиями через HTLC (Hash Time-Locked Contracts) + Chain Signatures.
Ограничения и зрелость
Chain Signatures — относительно новый продукт (mainnet запуск 2024). Зрелость инфраструктуры ниже, чем у Axelar или LayerZero. MPC latency: подпись занимает 3-5 секунд (off-chain координация валидаторов). Стоимость: каждый sign запрос стоит ~0.1 NEAR + gas.
Стек разработки
Frontend: React + near-api-js
NEAR smart contracts: Rust (near-sdk-rs) или TypeScript (near-sdk-js)
Target chain interactions: ethers.js, bitcoinjs-lib, @solana/web3.js
MPC контракт: v1.signer.near (mainnet), v1.signer-prod.testnet (testnet)
Сроки
- NEAR аккаунт + Chain Signatures базовый флоу: 2-3 недели
- Ethereum интеграция (транзакции + ERC-20): +1-2 недели
- Bitcoin поддержка: +2-3 недели
- Полноценный omnichain dApp: 2-3 месяца







