Skip to content

Instantly share code, notes, and snippets.

View olegpetroveth's full-sized avatar

Oleg Petrov olegpetroveth

View GitHub Profile
@olegpetroveth
olegpetroveth / chainflip_ccm_broadcast.ts
Created March 6, 2025 09:46
This can be used to broadcast a Chainflip signed payload and pay for gas using an EOA
import { ethers, Wallet } from "ethers";
// This can be used to broadcast a transaction stuck in Chainflip.
//
// One way this can happen is if a deposit channel's CCM payload has an insufficient gas limit.
// It can also happen if you transaction requires external state changes like an approval.
// Just run replace the privateKey and payload value and run `bun run ./script/chainflip/broadcast.ts` from root to broadcast the transaction
// `payload` can be found on CF's explorer swap page e.g. https://scan.chainflip.io/swaps/345692
const privateKey = "0x";
@olegpetroveth
olegpetroveth / ledgerSign.ts
Created August 19, 2024 20:07
Sample Ledger signature WIP
/* eslint-disable @typescript-eslint/no-unused-vars */
import * as fs from "fs";
import path from "path";
import type { LedgerMessageProtobuf } from "@thorswap/models";
import * as elliptic from "elliptic";
import forge from "node-forge";
import * as protobuf from "protobufjs";
import { env } from "./env.mjs";
syntax = "proto3";
package ledger_swap;
enum ExtraDataParsingMode {
NATIVE = 0;
EVM_CALLDATA = 1;
OP_RETURN = 2;
}
message NewTransactionResponse {
@olegpetroveth
olegpetroveth / warnings.ts
Created May 28, 2024 02:59
SwapKit API V1 WarningCodes
export interface IWarning {
warningCode: WarningCode;
warningMessage: string;
}
export enum WarningCode {
// transactional warnings
SwapAmountTooSmall = '1001',
LargeSwapAmount = '1002',
@olegpetroveth
olegpetroveth / swapKitClient.ts
Last active March 22, 2024 02:01
Up to date SwapKit Client example
import type { AssetValue, ConnectWalletParams, SwapKit } from "@swapkit/core";
import type { ThorchainProvider } from "@swapkit/thorchain";
import type { keystoreWallet } from "@swapkit/wallet-keystore";
import { SwapKitApi } from "@swapkit/api";
import { FeeOption } from "@swapkit/core";
import { Chain } from "@swapkit/types";
import { logger } from "@thorswap/logger";
type SupportedWallet = typeof keystoreWallet;
@olegpetroveth
olegpetroveth / txn_type.ts
Last active March 8, 2024 15:36
Tracker txn_type short list
export enum TransactionType {
SWAP_TC_TO_TC = 'SWAP:TC-TC',
SWAP_ETH_TO_TC = 'SWAP:ETH-TC',
SWAP_TC_TO_ETH = 'SWAP:TC-ETH',
SWAP_ETH_TO_ETH = 'SWAP:ETH-ETH',
SWAP_AVAX_TO_TC = 'SWAP:AVAX-TC',
SWAP_TC_TO_AVAX = 'SWAP:TC-AVAX',
SWAP_AVAX_TO_AVAX = 'SWAP:AVAX-AVAX',
@olegpetroveth
olegpetroveth / TSLendingLoop_V1.sol
Last active February 22, 2024 20:35
Thorchain Lending Looper Aggregator Contract - PoC
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
// I don't recommend anyone deploy or use this contract.
// This is not tested, not reviewed and certainly not audited.
import {Owners} from "../../lib/Owners.sol";
import {ReentrancyGuard} from "../../lib/ReentrancyGuard.sol";
import {SafeTransferLib} from "../../lib/SafeTransferLib.sol";
import {IThorchainRouterV4} from "../../interfaces/IThorchainRouterV4.sol";
@olegpetroveth
olegpetroveth / TSDistributor.sol
Created November 29, 2023 14:20
Simple contract to help with fee sharing agreements
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
import { IERC20 } from './interfaces/IERC20.sol';
import { Owners } from "./Owners.sol";
contract TSDistributor is Owners {
address public walletA;
address public walletB;
uint16 public shareA;
@olegpetroveth
olegpetroveth / TSMemoGenerator.sol
Created November 26, 2023 03:12
Thorswap Memo Generator Contract
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
contract TSMemoGenerator {
// Generic memo for swaps and loans
// e.g. SWAP:BNB.BNB:bnb108n64knfm38f0mm23nkreqqmpc7rpcw89sqqw5:1231230/2/6:t:30
function generic(
string memory action, // SWAP
string memory asset, // BNB.BNB
@olegpetroveth
olegpetroveth / evm-params.js
Created November 15, 2023 18:34
Encode/Decode EVM Params
const Web3 = require('web3');
// encode
const feePercents = [1000]; // 10% fee
const feeRecipients = ["0x9F9A7D3e131eD45225396613E383D59a732f7BeB"];
const encodedFees = Web3.eth.abi.encodeParameters(
['uint256[]', 'address[]'],
[feePercents, feeRecipients]
);