Created
June 30, 2022 19:31
-
-
Save bennofs/5393ae681f84aa59bd9b18c242eaede8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
"""Contains code for parsing the IDL file.""" | |
from hashlib import sha256 | |
from keyword import kwlist | |
from dataclasses import dataclass, field, asdict, make_dataclass, fields as dc_fields | |
from types import MappingProxyType | |
from typing import List, Union, Optional, Dict, Any, Literal, Tuple, TypedDict, TypeVar, Type, Mapping, cast, Protocol | |
import re | |
import typing | |
from apischema import deserialize, alias | |
from apischema.metadata import conversion | |
from borsh_construct import ( | |
CStruct, | |
TupleStruct, | |
Vec, | |
Enum, | |
Bool, | |
U8, | |
I8, | |
U16, | |
I16, | |
U32, | |
I32, | |
F32, | |
U64, | |
I64, | |
F64, | |
U128, | |
I128, | |
String, | |
Option, | |
) | |
import solana.publickey # noqa: WPS301 | |
from construct import Adapter, Bytes, Construct, Padding, IfThenElse, Switch, Renamed, Container, Sequence | |
class BorshPubkeyAdapter(Adapter): | |
def __init__(self) -> None: | |
super().__init__(Bytes(32)) # type: ignore | |
def _decode(self, obj: bytes, context, path) -> solana.publickey.PublicKey: | |
return solana.publickey.PublicKey(obj) | |
def _encode(self, obj: solana.publickey.PublicKey, context, path) -> bytes: | |
return bytes(obj) | |
BorshPubkey = BorshPubkeyAdapter() | |
class COption(Adapter): | |
_discriminator_key = "discriminator" | |
_value_key = "value" | |
def __init__(self, subcon: Construct) -> None: | |
option_struct = CStruct( | |
self._discriminator_key / U8, | |
self._value_key | |
/ IfThenElse( | |
lambda this: this[self._discriminator_key] == 0, | |
Padding(subcon.sizeof()), | |
subcon, | |
), | |
) | |
super().__init__(option_struct) # type: ignore | |
def _decode(self, obj, context, path) -> Any: | |
discriminator = obj[self._discriminator_key] | |
return None if discriminator == 0 else obj[self._value_key] | |
def _encode(self, obj, context, path) -> dict: | |
discriminator = 0 if obj is None else 1 | |
return {self._discriminator_key: discriminator, self._value_key: obj} | |
T = TypeVar("T") | |
class _DataclassStruct(Adapter): | |
"""Converts dataclasses to/from `borsh_construct.CStruct`.""" | |
def __init__(self, cstruct: CStruct, datacls: Type[T]) -> None: | |
"""Init. | |
Args: | |
cstruct: The underlying `CStruct`. | |
datacls: The dataclass type. | |
""" | |
super().__init__(cstruct) # type: ignore | |
self.datacls = datacls | |
def _decode(self, obj: Container, context, path) -> T: | |
kwargs = {} | |
for key, value in obj.items(): | |
if key[0] != "_": | |
key_to_use = f"{key}_" if key in kwlist else key | |
kwargs[key_to_use] = value | |
return self.datacls(**kwargs) # type: ignore | |
def _encode(self, obj: T, context, path) -> Dict[str, Any]: | |
if isinstance(obj, dict): | |
return obj | |
return asdict(obj) | |
_LiteralStrings = Literal[ | |
"bool", | |
"u8", | |
"i8", | |
"u16", | |
"i16", | |
"u32", | |
"i32", | |
"f32", | |
"u64", | |
"i64", | |
"f64", | |
"u128", | |
"i128", | |
"bytes", | |
"string", | |
"publicKey", | |
] | |
_NonLiteralIdlTypes = Union[ | |
"_IdlTypeVec", | |
"_IdlTypeOption", | |
"_IdlTypeCOption", | |
"_IdlTypeDefined", | |
"_IdlTypeArray", | |
] | |
_IdlType = Union[_NonLiteralIdlTypes, _LiteralStrings] | |
# We have to define these wrappers because snake and upper_camel | |
# don't have annotations | |
RE_TO_SNAKE = re.compile(r'(?<!^)(?=[A-Z])') | |
def underscore(s: str) -> str: | |
return RE_TO_SNAKE.sub('_', s).lower() | |
def camelize(s: str) -> str: | |
return ''.join(word.title() for word in s.split('_')) | |
snake_case_conversion = conversion(underscore, camelize) | |
@dataclass | |
class _IdlTypeVec: | |
"""IDL vector type.""" | |
vec: _IdlType | |
@dataclass | |
class _IdlTypeOption: | |
"""IDL option type.""" | |
option: _IdlType | |
@dataclass | |
class _IdlTypeCOption: | |
"""IDL coption type.""" | |
coption: _IdlType | |
@dataclass | |
class _IdlTypeDefined: | |
"""IDL type that points to a user-defined type.""" | |
defined: str | |
@dataclass | |
class _IdlField: | |
"""IDL representation of a field. | |
Used in instructions and user-defined types. | |
""" | |
name: str = field(metadata=snake_case_conversion) | |
type: _IdlType | |
_IdlSeed = Any | |
@dataclass | |
class _IdlPda: | |
seeds: List[_IdlSeed] | |
program_id: Optional[_IdlSeed] = None | |
@dataclass | |
class _IdlAccount: | |
"""IDL account type.""" | |
name: str = field(metadata=snake_case_conversion) | |
is_mut: bool = field(metadata=alias("isMut")) | |
is_signer: bool = field(metadata=alias("isSigner")) | |
pda: Optional[_IdlPda] = None | |
@dataclass | |
class _IdlAccounts: | |
"""Nested/recursive version of _IdlAccount.""" | |
name: str = field(metadata=snake_case_conversion) | |
accounts: List["_IdlAccountItem"] | |
_IdlAccountItem = Union[_IdlAccounts, _IdlAccount] | |
@dataclass | |
class _IdlInstruction: | |
"""IDL representation of a program instruction.""" | |
name: str = field(metadata=snake_case_conversion) | |
accounts: List[_IdlAccountItem] | |
args: List[_IdlField] | |
returns: Optional[_IdlType] = None | |
_IdlEnumFieldsNamed = List[_IdlField] | |
_IdlEnumFieldsTuple = List[_IdlType] | |
_IdlEnumFields = Union[_IdlEnumFieldsNamed, _IdlEnumFieldsTuple] | |
@dataclass | |
class _IdlEnumVariant: | |
"""IDL representation of a variant of an enum.""" | |
name: str | |
fields: Optional[_IdlEnumFields] = None | |
_IdlTypeDefStruct = List[_IdlField] | |
@dataclass | |
class _IdlTypeDefTyStruct: | |
"""IDL representation of a struct.""" | |
fields: _IdlTypeDefStruct | |
kind: Literal["struct"] = "struct" | |
@dataclass | |
class _IdlTypeDefTyEnum: | |
"""IDL representation of an enum.""" | |
variants: List[_IdlEnumVariant] | |
kind: Literal["enum"] = "enum" | |
_IdlTypeDefTy = Union[_IdlTypeDefTyEnum, _IdlTypeDefTyStruct] | |
@dataclass | |
class _IdlTypeDef: | |
"""IDL representation of a user-defined type.""" | |
name: str | |
type: _IdlTypeDefTy | |
@dataclass | |
class _IdlAccountDef: | |
"""IDL representation of an account.""" | |
name: str | |
type: _IdlTypeDefTyStruct | |
_IdlStateMethod = _IdlInstruction | |
@dataclass | |
class _IdlState: | |
"""IDL representation of a program state method.""" | |
struct: _IdlTypeDef | |
methods: List[_IdlStateMethod] | |
@dataclass | |
class _IdlTypeArray: | |
"""IDL array type.""" | |
array: Tuple[_IdlType, int] | |
@dataclass | |
class _IdlEventField: | |
"""IDL representation of an event field.""" | |
name: str | |
type: _IdlType | |
index: bool | |
@dataclass | |
class _IdlConstant: | |
"""IDL representation of a constant value.""" | |
name: str | |
type: _IdlType | |
value: str | |
@dataclass | |
class _IdlEvent: | |
"""IDL representation of an event. | |
Composed of a list of event fields. | |
""" | |
name: str | |
fields: List[_IdlEventField] | |
@dataclass | |
class _IdlErrorCode: | |
"""IDL error code type.""" | |
code: int | |
name: str | |
msg: Optional[str] = None | |
@dataclass | |
class _Metadata: | |
"""IDL metadata field.""" | |
address: str | |
@dataclass | |
class Idl: | |
"""A parsed IDL object.""" | |
version: str | |
name: str | |
instructions: List[_IdlInstruction] | |
state: Optional[_IdlState] = None | |
accounts: List[_IdlAccountDef] = field(default_factory=list) | |
types: List[_IdlTypeDef] = field(default_factory=list) | |
events: List[_IdlEvent] = field(default_factory=list) | |
errors: List[_IdlErrorCode] = field(default_factory=list) | |
constants: List[_IdlConstant] = field(default_factory=list) | |
metadata: Optional[_Metadata] = None | |
@classmethod | |
def from_json(cls, idl: Dict[str, Any]) -> "Idl": | |
"""Generate a parsed IDL from a JSON dict. | |
Args: | |
idl: The raw IDL dict. | |
Returns: | |
The parsed Idl object. | |
""" | |
return deserialize(cls, idl) | |
def _idl_address(program_id: solana.publickey.PublicKey) -> solana.publickey.PublicKey: | |
"""Deterministic IDL address as a function of the program id. | |
Args: | |
program_id: The program ID. | |
Returns: | |
The public key of the IDL. | |
""" | |
base = solana.publickey.PublicKey.find_program_address([], program_id)[0] | |
return solana.publickey.PublicKey.create_with_seed(base, "anchor:idl", program_id) | |
class IdlProgramAccount(TypedDict): | |
"""The on-chain account of the IDL.""" | |
authority: solana.publickey.PublicKey | |
data: bytes | |
IDL_ACCOUNT_LAYOUT = CStruct("authority" / BorshPubkey, "data" / Vec(U8)) | |
def _decode_idl_account(data: bytes) -> IdlProgramAccount: | |
"""Decode on-chain IDL. | |
Args: | |
data: binary data from the account that stores the IDL. | |
Returns: | |
Decoded IDL. | |
""" | |
return IDL_ACCOUNT_LAYOUT.parse(data) | |
_AccountDefOrTypeDef = Union[_IdlTypeDef, _IdlAccountDef] | |
_AccountDefsOrTypeDefs = typing.Sequence[_AccountDefOrTypeDef] | |
FIELD_TYPE_MAP: Mapping[str, Construct] = MappingProxyType( | |
{ | |
"bool": Bool, | |
"u8": U8, | |
"i8": I8, | |
"u16": U16, | |
"i16": I16, | |
"u32": U32, | |
"i32": I32, | |
"f32": F32, | |
"u64": U64, | |
"i64": I64, | |
"f64": F64, | |
"u128": U128, | |
"i128": I128, | |
"bytes": Bytes, | |
"string": String, | |
"publicKey": BorshPubkey, | |
}, | |
) | |
_enums_cache: dict[tuple[str, str], Enum] = {} | |
def _handle_enum_variants( | |
idl_enum: _IdlTypeDefTyEnum, | |
types: _AccountDefsOrTypeDefs, | |
name: str, | |
) -> Enum: | |
dict_key = (name, str(idl_enum)) | |
try: | |
return _enums_cache[dict_key] | |
except KeyError: | |
result = _handle_enum_variants_no_cache(idl_enum, types, name) | |
_enums_cache[dict_key] = result | |
return result | |
def _handle_enum_variants_no_cache( | |
idl_enum: _IdlTypeDefTyEnum, | |
types: _AccountDefsOrTypeDefs, | |
name: str, | |
) -> Enum: | |
variants = [] | |
dclasses = {} | |
for variant in idl_enum.variants: | |
variant_name = variant.name | |
if variant.fields is None: | |
variants.append(variant_name) | |
else: | |
variant_fields = variant.fields | |
if isinstance(variant_fields[0], _IdlField): | |
fields = [] | |
named_fields = cast(_IdlEnumFieldsNamed, variant_fields) | |
for fld in named_fields: | |
fields.append(_field_layout(fld, types)) | |
cstruct = CStruct(*fields) | |
datacls = _idl_enum_fields_named_to_dataclass_type( | |
named_fields, | |
variant_name, | |
) | |
dclasses[variant_name] = datacls | |
renamed = variant_name / cstruct | |
else: | |
fields = [] | |
unnamed_fields = cast(_IdlEnumFieldsTuple, variant_fields) | |
for type_ in unnamed_fields: | |
fields.append(_type_layout(type_, types)) | |
tuple_struct = TupleStruct(*fields) | |
renamed = variant_name / tuple_struct | |
variants.append(renamed) # type: ignore | |
enum_without_types = Enum(*variants, enum_name=name) | |
if dclasses: | |
for cname in enum_without_types.enum._sumtype_constructor_names: | |
try: | |
dclass = dclasses[cname] | |
except KeyError: | |
continue | |
dclass_fields = dc_fields(dclass) | |
constructr = getattr(enum_without_types.enum, cname) | |
for constructor_field in constructr._sumtype_attribs: | |
attrib = constructor_field[1] # type: ignore | |
fld_name = constructor_field[0] # type: ignore | |
dclass_field = [f for f in dclass_fields if f.name == fld_name][0] | |
attrib.type = dclass_field.type # type: ignore | |
return enum_without_types | |
def _typedef_layout_without_field_name( | |
typedef: _AccountDefOrTypeDef, | |
types: _AccountDefsOrTypeDefs, | |
) -> Construct: | |
typedef_type = typedef.type | |
name = typedef.name | |
if isinstance(typedef_type, _IdlTypeDefTyStruct): | |
field_layouts = [_field_layout(field, types) for field in typedef_type.fields] | |
cstruct = CStruct(*field_layouts) | |
datacls = _idl_typedef_ty_struct_to_dataclass_type(typedef_type, name) | |
return _DataclassStruct(cstruct, datacls=datacls) | |
elif isinstance(typedef_type, _IdlTypeDefTyEnum): | |
return _handle_enum_variants(typedef_type, types, name) | |
unknown_type = typedef_type.kind | |
raise ValueError(f"Unknown type {unknown_type}") | |
def _typedef_layout( | |
typedef: _AccountDefOrTypeDef, | |
types: list[_IdlTypeDef], | |
field_name: str, | |
) -> Construct: | |
"""Map an IDL typedef to a `Construct` object. | |
Args: | |
typedef: The IDL typedef object. | |
types: IDL type definitions. | |
field_name: The name of the field. | |
Raises: | |
ValueError: If an unknown type is passed. | |
Returns: | |
`Construct` object from `borsh-construct`. | |
""" # noqa: DAR402 | |
return field_name / _typedef_layout_without_field_name(typedef, types) | |
def _type_layout(type_: _IdlType, types: _AccountDefsOrTypeDefs) -> Construct: | |
if isinstance(type_, str): | |
return FIELD_TYPE_MAP[type_] | |
field_type = cast( | |
_NonLiteralIdlTypes, | |
type_, | |
) | |
if isinstance(field_type, _IdlTypeVec): | |
return Vec(_type_layout(field_type.vec, types)) | |
elif isinstance(field_type, _IdlTypeOption): | |
return Option(_type_layout(field_type.option, types)) | |
elif isinstance(field_type, _IdlTypeCOption): | |
return COption(_type_layout(field_type.coption, types)) | |
elif isinstance(field_type, _IdlTypeDefined): | |
defined = field_type.defined | |
if not types: | |
raise ValueError("User defined types not provided") | |
filtered = [t for t in types if t.name == defined] | |
if len(filtered) != 1: | |
raise ValueError(f"Type not found {defined}") | |
return _typedef_layout_without_field_name(filtered[0], types) | |
elif isinstance(field_type, _IdlTypeArray): | |
array_ty = field_type.array[0] | |
array_len = field_type.array[1] | |
inner_layout = _type_layout(array_ty, types) | |
return inner_layout[array_len] | |
raise ValueError(f"Type {field_type} not implemented yet") | |
def _field_layout(field: _IdlField, types: _AccountDefsOrTypeDefs) -> Construct: | |
"""Map IDL spec to `borsh-construct` types. | |
Args: | |
field: field object from the IDL. | |
types: IDL type definitions. | |
Raises: | |
ValueError: If the user-defined types are not provided. | |
ValueError: If the type is not found. | |
ValueError: If the type is not implemented yet. | |
Returns: | |
`Construct` object from `borsh-construct`. | |
""" # noqa: DAR402 | |
field_name = field.name if field.name else "" | |
return field_name / _type_layout(field.type, types) | |
def _make_datacls(name: str, fields: list[str]) -> type: | |
return make_dataclass(name, fields) | |
_idl_typedef_ty_struct_to_dataclass_type_cache: dict[tuple[str, str], Type] = {} | |
def _idl_typedef_ty_struct_to_dataclass_type( | |
typedef_type: _IdlTypeDefTyStruct, | |
name: str, | |
) -> Type: | |
dict_key = (name, str(typedef_type)) | |
try: | |
return _idl_typedef_ty_struct_to_dataclass_type_cache[dict_key] | |
except KeyError: | |
result = _idl_typedef_ty_struct_to_dataclass_type_no_cache(typedef_type, name) | |
_idl_typedef_ty_struct_to_dataclass_type_cache[dict_key] = result | |
return result | |
def _idl_typedef_ty_struct_to_dataclass_type_no_cache( | |
typedef_type: _IdlTypeDefTyStruct, | |
name: str, | |
) -> Type: | |
"""Generate a dataclass definition from an IDL struct. | |
Args: | |
typedef_type: The IDL type. | |
name: The name of the dataclass. | |
Returns: | |
Dataclass definition. | |
""" | |
dataclass_fields = [] | |
for field in typedef_type.fields: | |
field_name = field.name | |
field_name_to_use = f"{field_name}_" if field_name in kwlist else field_name | |
dataclass_fields.append( | |
field_name_to_use, | |
) | |
return _make_datacls(name, dataclass_fields) | |
_idl_enum_fields_named_to_dataclass_type_cache: dict[tuple[str, str], Type] = {} | |
def _idl_enum_fields_named_to_dataclass_type( | |
fields: _IdlEnumFieldsNamed, | |
name: str, | |
) -> Type: | |
dict_key = (name, str(fields)) | |
try: | |
return _idl_enum_fields_named_to_dataclass_type_cache[dict_key] | |
except KeyError: | |
result = _idl_enum_fields_named_to_dataclass_type_no_cache(fields, name) | |
_idl_enum_fields_named_to_dataclass_type_cache[dict_key] = result | |
return result | |
def _idl_enum_fields_named_to_dataclass_type_no_cache( | |
fields: _IdlEnumFieldsNamed, | |
name: str, | |
) -> Type: | |
"""Generate a dataclass definition from IDL named enum fields. | |
Args: | |
fields: The IDL enum fields. | |
name: The name of the dataclass. | |
Returns: | |
Dataclass type definition. | |
""" | |
dataclass_fields = [] | |
for field in fields: | |
field_name = field.name | |
field_name_to_use = f"{field_name}_" if field_name in kwlist else field_name | |
dataclass_fields.append( | |
field_name_to_use, | |
) | |
return _make_datacls(name, dataclass_fields) | |
def _idl_typedef_to_python_type( | |
typedef: _AccountDefOrTypeDef, | |
types: _AccountDefsOrTypeDefs, | |
) -> Type: | |
"""Generate Python type from IDL user-defined type. | |
Args: | |
typedef: The user-defined type. | |
types: IDL type definitions. | |
Raises: | |
ValueError: If an unknown type is passed. | |
Returns: | |
The Python type. | |
""" | |
typedef_type = typedef.type | |
if isinstance(typedef_type, _IdlTypeDefTyStruct): | |
return _idl_typedef_ty_struct_to_dataclass_type( | |
typedef_type, | |
typedef.name, | |
) | |
elif isinstance(typedef_type, _IdlTypeDefTyEnum): | |
return _handle_enum_variants(typedef_type, types, typedef.name).enum | |
unknown_type = typedef_type.kind | |
raise ValueError(f"Unknown type {unknown_type}") | |
def _sighash(ix_name: str) -> bytes: | |
"""Not technically sighash, since we don't include the arguments. | |
(Because Rust doesn't allow function overloading.) | |
Args: | |
ix_name: The instruction name. | |
Returns: | |
The sighash bytes. | |
""" | |
formatted_str = f"global:{ix_name}" | |
return sha256(formatted_str.encode()).digest()[:8] | |
class _Sighash(Adapter): | |
"""Sighash as a Construct Adapter.""" | |
def __init__(self) -> None: | |
"""Initialize.""" | |
super().__init__(Bytes(8)) # type: ignore | |
def _encode(self, obj: str, context, path) -> bytes: | |
return _sighash(obj) | |
def _decode(self, obj: bytes, context, path): | |
raise ValueError("Sighash cannot be reversed") | |
class InstructionCoder(Adapter): | |
"""Encodes and decodes program instructions.""" | |
def __init__(self, idl: Idl) -> None: | |
"""Init. | |
Args: | |
idl: The parsed IDL object. | |
""" | |
self.ix_layout = _parse_ix_layout(idl) | |
sighasher = _Sighash() | |
sighash_layouts: Dict[bytes, Construct] = {} | |
sighashes: Dict[str, bytes] = {} | |
sighash_to_name: Dict[bytes, str] = {} | |
for ix in idl.instructions: | |
sh = sighasher.build(ix.name) | |
sighashes[ix.name] = sh | |
sighash_layouts[sh] = self.ix_layout[ix.name] | |
sighash_to_name[sh] = ix.name | |
self.sighash_layouts = sighash_layouts | |
self.sighashes = sighashes | |
self.sighash_to_name = sighash_to_name | |
subcon = Sequence( | |
"sighash" / Bytes(8), | |
Switch(lambda this: this.sighash, sighash_layouts), | |
) | |
super().__init__(subcon) # type: ignore | |
def _decode(self, obj: Tuple[bytes, Any], context, path) -> dict[str, Any]: | |
return { 'data': obj[1], 'name': self.sighash_to_name[obj[0]] } | |
_SA = TypeVar("_SA", bound="_SupportsAdd") | |
class _SupportsAdd(Protocol): | |
"""Any type T where +(:T, :T) -> T.""" | |
def __add__(self: _SA, other: _SA) -> _SA: | |
... | |
def _parse_ix_layout(idl: Idl) -> Dict[str, Construct]: | |
ix_layout: Dict[str, Construct] = {} | |
for ix in idl.instructions: | |
typedefs = cast(_SupportsAdd, idl.accounts) + cast(_SupportsAdd, idl.types) | |
field_layouts = [ | |
_field_layout(arg, cast(_AccountDefsOrTypeDefs, typedefs)) | |
for arg in ix.args | |
] | |
ix_layout[ix.name] = ix.name / CStruct(*field_layouts) | |
return ix_layout |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
VOTE_PROGRAM_ID = 'Vote111111111111111111111111111111111111111' | |
SYSTEM_PROGRAM_ID = '11111111111111111111111111111111' | |
STAKE_PROGRAM_ID = 'Stake11111111111111111111111111111111111111' | |
SPL_TOKEN_ID = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' | |
SPL_ATA_ID = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' | |
SCAM_NOOP_PROGRAM_ID = 'DeJBGdMFa1uynnnKiwrVioatTuHmNLpyFKnmB5kaFdzQ' | |
WSOL_MINT_ID = 'So11111111111111111111111111111111111111112' | |
TOKEN_RENT_EXEMPT_AMOUNT = 2039280 | |
STAKE_RENT_EXEMPT_AMOUNT = 2282880 | |
BPF_LOADER_ID = 'BPFLoader2111111111111111111111111111111111' | |
BPF_UPGRADEABLE_LOADER_ID = 'BPFLoaderUpgradeab1e11111111111111111111111' | |
JUP_ID = 'JUP2jxvXaqu7NQY1GmNF4m1vodw12LVXYxbFL2uJvfo' | |
ORCA_ID = '9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP' | |
RAYDIUM_V4_ID = '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
"""Fetch staking rewards for the given solana account addresses | |
Usage: | |
fetch-staking-rewards.py [options] PUBKEY... | |
Options: | |
-u URL,--rpc=URL Solana RPC API endpoint [default: https://api.mainnet-beta.solana.com] | |
-f FILE, --file=FILE CSV File to write the reward records to [default: rewards.csv] | |
""" | |
from docopt import docopt | |
from lib import SolRpc, fetch_staking_rewards | |
def main(): | |
args = docopt(__doc__ or "") | |
rpc = SolRpc(args["--rpc"]) | |
fetch_staking_rewards(rpc, args['PUBKEY'], args['--file']) | |
if __name__ == "__main__": | |
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"version": "0.0.0", | |
"name": "vault", | |
"instructions": [ | |
{ | |
"name": "createVaultMetadata", | |
"accounts": [ | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultMetadataAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMintAddress", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenaccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardTokenaccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapOrLiquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "slippage", | |
"type": "u64" | |
}, | |
{ | |
"name": "rayPoolVersion", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "applyVaultMetadata", | |
"accounts": [ | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultMetadataAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMintAddress", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenaccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardTokenaccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapOrLiquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "slippage", | |
"type": "u64" | |
}, | |
{ | |
"name": "rayPoolVersion", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "applyVaultUpdate", | |
"accounts": [ | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardAAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardBAccount", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "VaultUpdateArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "createVault", | |
"accounts": [ | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultMetadataAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardMintA", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardMintB", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "infoAccountPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardAccountPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardBAccountPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapToPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapToMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stakeProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrdersAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "vaultArgs", | |
"type": { | |
"defined": "NewVaultArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "createDualVault", | |
"accounts": [ | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultMetadataAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardMintA", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardMintB", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "infoAccountPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardAccountPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardBAccountPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapToPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapToMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stakeProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrdersAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "vaultArgs", | |
"type": { | |
"defined": "NewVaultArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "depositVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "authorityTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stakeProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceMetadata", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "depositArgs", | |
"type": { | |
"defined": "DepositVaultArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "harvestMigrateTulips", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTulipRewardMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTulipTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultTulipTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "oldUserBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "oldUserBalanceMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "oldUserTulipRewardMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "harvestArgs", | |
"type": { | |
"defined": "HarvestMigrateTulipsArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "harvestTulips", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTulipRewardMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTulipTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultTulipTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "harvestArgs", | |
"type": { | |
"defined": "HarvestTulipsArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "withdrawVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "authorityTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "stakeProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceMeta", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "withdrawArgs", | |
"type": { | |
"defined": "WithdrawVaultArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "withdrawVaultNew", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "authorityTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "stakeProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceMeta", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "auxInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "withdrawArgs", | |
"type": { | |
"defined": "WithdrawVaultArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "withdrawTulips", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawTulipTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultTulipTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "amountToWithdraw", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "harvestVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stakeProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "swapVaultToken", | |
"accounts": [ | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "swapOrLiquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapToAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "swapVaultRewards", | |
"accounts": [ | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "swapOrLiquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapToAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeRecipient", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "swapDualVaultRewards", | |
"accounts": [ | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "swapOrLiquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinRewardAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcRewardAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinFeeRecipient", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcFeeRecipient", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "AddLiquidityArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "addLiquidity", | |
"accounts": [ | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "liquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMintAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultCoinTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPcTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultLpTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "AddLiquidityArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "addLiquidityIssueShares", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "liquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMintAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "authorityCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "authorityPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenAuthority", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "AddLiquidityIssueSharesArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "depositFarm", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stakeProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "single", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "createAssociatedLedgerAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stakeProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "associatedLedgerAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "createVaultDepositQueueAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "serumSwapOrder", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "market", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrdersAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "requestQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "eventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "marketBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "marketAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orderPayer", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrdersAccountOwner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "splTokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "metadataAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeRecipient", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orderPayerMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "SerumSwapArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "serumSwapSettle", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "market", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrdersAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "requestQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "eventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "marketBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "marketAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orderPayer", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrdersAccountOwner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "splTokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "metadataAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeRecipient", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orderPayerMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "setVaultFees", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "SetVaultFeesArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "setVaultAuthorities", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "SetVaultAuthoritiesArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "setVaultPrecisionFactor", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMintAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "setVaultCompoundInterval", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "SetVaultCompoundIntervalArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "setVaultLastCompound", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "setVaultRewards", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "SetVaultRewardsArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "updateMigratedVaults", | |
"accounts": [ | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "oldInfoAccount", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "resetVaultBalance", | |
"accounts": [ | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
} | |
], | |
"state": { | |
"struct": { | |
"name": "Management", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "authority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "whitelist", | |
"type": { | |
"vec": { | |
"defined": "WhitelistEntry" | |
} | |
} | |
} | |
] | |
} | |
}, | |
"methods": [ | |
{ | |
"name": "new", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [ | |
{ | |
"name": "authority", | |
"type": "publicKey" | |
} | |
] | |
}, | |
{ | |
"name": "setManagementAuthority", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [ | |
{ | |
"name": "newAuthority", | |
"type": "publicKey" | |
} | |
] | |
} | |
] | |
}, | |
"accounts": [ | |
{ | |
"name": "VaultMetadata", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "ammId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "ammAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumProgramId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumMarket", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumBids", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumAsks", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumEventQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lpMintAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolLpTokenaccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolRewardTokenaccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "swapOrLiquidityProgramId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rayPoolVersion", | |
"type": "u64" | |
}, | |
{ | |
"name": "slippage", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Vault", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "authority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "tokenProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pdaTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pda", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "infoNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "rewardANonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "rewardBNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "swapToNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "totalVaultBalance", | |
"type": "u64" | |
}, | |
{ | |
"name": "infoAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lpTokenMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rewardAAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rewardBAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "swapToAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "totalVlpShares", | |
"type": "u64" | |
}, | |
{ | |
"name": "poolId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "stakeProgramId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "dualReward", | |
"type": "bool" | |
}, | |
{ | |
"name": "metadataAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "openOrdersAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "controllerFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "vaultFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "entranceFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "withdrawalFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "feeRecipient", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "feeAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "compoundAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "precisionFactor", | |
"type": "u64" | |
}, | |
{ | |
"name": "lastCompoundTime", | |
"type": "i64" | |
}, | |
{ | |
"name": "compoundInterval", | |
"type": "i64" | |
}, | |
{ | |
"name": "dualFeeRecipient", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "tulipRewardPerSlot", | |
"type": "u64" | |
}, | |
{ | |
"name": "tulipRewardPerShare", | |
"type": "u128" | |
}, | |
{ | |
"name": "tulipRewardEndSlot", | |
"type": "u64" | |
}, | |
{ | |
"name": "lastInteractionSlot", | |
"type": "u64" | |
}, | |
{ | |
"name": "stakingStateRefreshed", | |
"type": "bool" | |
}, | |
{ | |
"name": "disabled", | |
"type": "bool" | |
}, | |
{ | |
"name": "migrated", | |
"type": "bool" | |
}, | |
{ | |
"name": "oldUserInfoAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "associatedInfoAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "versionFive", | |
"type": "bool" | |
}, | |
{ | |
"name": "depositQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "depositQueueNonce", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "VaultBalanceAccount", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "owner", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "VaultBalanceMetadata", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "lastDepositTime", | |
"type": "i64" | |
}, | |
{ | |
"name": "totalLpTokens", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "VaultTulipRewardMetadata", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "lastPendingReward", | |
"type": "u64" | |
}, | |
{ | |
"name": "rewardPerSharePaid", | |
"type": "u128" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"publicKey", | |
5 | |
] | |
} | |
} | |
] | |
} | |
} | |
], | |
"types": [ | |
{ | |
"name": "SetVaultRewardsArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "tulipRewardPerSlot", | |
"type": "u64" | |
}, | |
{ | |
"name": "tulipRewardEndSlot", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "SetVaultCompoundIntervalArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "interval", | |
"type": "i64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "WhitelistEntry", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "authority", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "NewVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "vaultAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "rewardNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "rewardBNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "infoNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "swapToNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "dualReward", | |
"type": "bool" | |
}, | |
{ | |
"name": "controllerFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "vaultFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "entranceFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "withdrawalFee", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "DepositVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "amount", | |
"type": "u64" | |
}, | |
{ | |
"name": "metaNonce", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "HarvestMigrateTulipsArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "oldNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "oldMetaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "oldRewardNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "metaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "rewardNonce", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "HarvestTulipsArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "metaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "rewardNonce", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "WithdrawVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
}, | |
{ | |
"name": "metaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "SerumSwapArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "side", | |
"type": "u8" | |
}, | |
{ | |
"name": "orderType", | |
"type": "u8" | |
}, | |
{ | |
"name": "clientOrderId", | |
"type": "u64" | |
}, | |
{ | |
"name": "selfTradeBehavior", | |
"type": "u8" | |
}, | |
{ | |
"name": "slippage", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "AddLiquidityArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "coinOpenLiquidity", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcOpenLiquidity", | |
"type": "u64" | |
}, | |
{ | |
"name": "coinTakepnl", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcTakepnl", | |
"type": "u64" | |
}, | |
{ | |
"name": "dualYield", | |
"type": "bool" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "AddLiquidityIssueSharesArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "liquidityArgs", | |
"type": { | |
"defined": "AddLiquidityArgs" | |
} | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "metaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "coinDeposit", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcDeposit", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "SetVaultFeesArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "controllerFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "vaultFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "entranceFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "withdrawalFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "feeRecipient", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "dualFeeRecipient", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "SetVaultAuthoritiesArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "feeAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "compoundAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultAuthority", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "BeginMigrationArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "infoNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "debug", | |
"type": "bool" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "EndMigrationArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "infoNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "infoAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "enableDualReward", | |
"type": "bool" | |
}, | |
{ | |
"name": "createDualRewardAccount", | |
"type": "bool" | |
}, | |
{ | |
"name": "dualFeeRecipient", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "VaultUpdateArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "aNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "bNonce", | |
"type": "u8" | |
} | |
] | |
} | |
} | |
], | |
"errors": [ | |
{ | |
"code": 100, | |
"name": "Unauthorized", | |
"msg": "must be an authorized caller" | |
}, | |
{ | |
"code": 101, | |
"name": "InvalidNonce", | |
"msg": "nonce given produced invalid address" | |
}, | |
{ | |
"code": 102, | |
"name": "InvalidTokenProgram", | |
"msg": "given token program is invalid" | |
}, | |
{ | |
"code": 103, | |
"name": "VaultBalanceTooLow", | |
"msg": "vault total token balance is too low" | |
}, | |
{ | |
"code": 104, | |
"name": "UserBalanceTooLow", | |
"msg": "users balance for this vault is too low" | |
}, | |
{ | |
"code": 105, | |
"name": "InvalidTokenAccount", | |
"msg": "token account given is invalid" | |
}, | |
{ | |
"code": 106, | |
"name": "InvalidInfoAccount", | |
"msg": "token account given is invalid" | |
}, | |
{ | |
"code": 107, | |
"name": "InvalidPdaAccount", | |
"msg": "pda account given is invalid" | |
}, | |
{ | |
"code": 108, | |
"name": "InvalidRewardAccount", | |
"msg": "reward account given is invalid" | |
}, | |
{ | |
"code": 109, | |
"name": "InvalidPoolId", | |
"msg": "pool id given is invalid" | |
}, | |
{ | |
"code": 110, | |
"name": "InvalidPoolAuthority", | |
"msg": "pool authority given is invalid" | |
}, | |
{ | |
"code": 111, | |
"name": "InvalidStakeProgram", | |
"msg": "stake program is invalid" | |
}, | |
{ | |
"code": 112, | |
"name": "EmptyOrderBookState", | |
"msg": "failed to find asks or bids in orderbook" | |
}, | |
{ | |
"code": 113, | |
"name": "InvalidVaultMetadataAccount", | |
"msg": "invalid vault metadata account" | |
}, | |
{ | |
"code": 114, | |
"name": "InvalidSerumOpenOrdersAccount", | |
"msg": "invalid serum open orders account" | |
}, | |
{ | |
"code": 115, | |
"name": "InvalidSerumMarket", | |
"msg": "invalid serum market" | |
}, | |
{ | |
"code": 116, | |
"name": "InvalidSerumEventQueue", | |
"msg": "invalid serum event queue" | |
}, | |
{ | |
"code": 117, | |
"name": "InvalidSerumMarketBids", | |
"msg": "invalid serum market bids" | |
}, | |
{ | |
"code": 118, | |
"name": "InvalidSerumMarketAsks", | |
"msg": "invlaid serum market asks" | |
}, | |
{ | |
"code": 119, | |
"name": "InvalidSerumCoinVault", | |
"msg": "invalid serum coin (base) vault" | |
}, | |
{ | |
"code": 120, | |
"name": "InvalidSerumPCVault", | |
"msg": "invalid serum pc (quote) vault" | |
}, | |
{ | |
"code": 121, | |
"name": "InvalidCoinWallet", | |
"msg": "invalid coin (base) wallet" | |
}, | |
{ | |
"code": 122, | |
"name": "InvalidPCWallet", | |
"msg": "invalid pc (quote) wallet" | |
}, | |
{ | |
"code": 123, | |
"name": "InvalidAmmId", | |
"msg": "invalid amm id" | |
}, | |
{ | |
"code": 124, | |
"name": "InvalidSwapToAccount", | |
"msg": "invalid swap to account" | |
}, | |
{ | |
"code": 125, | |
"name": "InvalidSerumVaultSigner", | |
"msg": "invalid serum vault signer" | |
}, | |
{ | |
"code": 126, | |
"name": "InvalidSerumProgramId", | |
"msg": "invalid serum program id" | |
}, | |
{ | |
"code": 127, | |
"name": "InvalidPoolPcTokenAccount", | |
"msg": "invalid pool pc token account" | |
}, | |
{ | |
"code": 128, | |
"name": "InvalidPoolCoinTokenAccount", | |
"msg": "invalid coin token account" | |
}, | |
{ | |
"code": 129, | |
"name": "InvalidAmmQuantitiesOrTargetOrders", | |
"msg": "invalid amm quantities or target orders" | |
}, | |
{ | |
"code": 130, | |
"name": "InvalidAmmOpenOrders", | |
"msg": "invalid amm open orders" | |
}, | |
{ | |
"code": 131, | |
"name": "InvalidAmmAuthority", | |
"msg": "invalid amm authority" | |
}, | |
{ | |
"code": 132, | |
"name": "InvalidSwapProgramId", | |
"msg": "invalid swap program id" | |
}, | |
{ | |
"code": 133, | |
"name": "InvalidVaultLptokenAccount", | |
"msg": "invalid vault lp token account" | |
}, | |
{ | |
"code": 134, | |
"name": "InvalidLpMintAddress", | |
"msg": "invalid lp mint address" | |
}, | |
{ | |
"code": 135, | |
"name": "InvalidLiquidityProgramId", | |
"msg": "invalid liquidity program id" | |
}, | |
{ | |
"code": 136, | |
"name": "InvalidPoolType", | |
"msg": "invalid pool type" | |
}, | |
{ | |
"code": 137, | |
"name": "InvalidFeeRecipient", | |
"msg": "invalid fee recipient" | |
}, | |
{ | |
"code": 138, | |
"name": "InvalidAuthority", | |
"msg": "invalid authority given" | |
}, | |
{ | |
"code": 139, | |
"name": "PrecisionFactorNotSet", | |
"msg": "precison factor not set" | |
}, | |
{ | |
"code": 140, | |
"name": "PrecisionFactorAlreadySet", | |
"msg": "precison factor already set" | |
}, | |
{ | |
"code": 141, | |
"name": "AmountBelowMinimumLotSize", | |
"msg": "given token amount is below the minimum lot size" | |
}, | |
{ | |
"code": 142, | |
"name": "InsufficientFunds", | |
"msg": "account has too little balance for the specified operation" | |
}, | |
{ | |
"code": 143, | |
"name": "InvalidCompoundInterval", | |
"msg": "invalid compound interval" | |
}, | |
{ | |
"code": 144, | |
"name": "InvalidInteractionSlot", | |
"msg": "invalid interaction slot" | |
}, | |
{ | |
"code": 145, | |
"name": "InvalidClaimDepositAmount", | |
"msg": "invalid deposit amount for claim" | |
}, | |
{ | |
"code": 146, | |
"name": "InvalidUserBalanceAccount", | |
"msg": "invalid user balance account" | |
}, | |
{ | |
"code": 147, | |
"name": "InvalidTulipRewardMetadataAccount", | |
"msg": "invalid tulip reward metadata account" | |
}, | |
{ | |
"code": 148, | |
"name": "StakingStateNotRefreshed", | |
"msg": "staking state not refreshed" | |
}, | |
{ | |
"code": 149, | |
"name": "VaultDisabled", | |
"msg": "vault disabled" | |
}, | |
{ | |
"code": 150, | |
"name": "InvalidMigrationState", | |
"msg": "invalid migration state" | |
}, | |
{ | |
"code": 151, | |
"name": "InvalidAuxInfoAccount", | |
"msg": "invalid aux info account" | |
} | |
] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"version": "0.0.0", | |
"name": "farm", | |
"instructions": [ | |
{ | |
"name": "createLeveragedFarm", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "serumMarket", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "solfarmVaultAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumRequestQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumEventQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumMarketBids", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumMarketAsks", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumFeeRecipient", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumDexProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumLpMintAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmOpenOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmQuantitiesOrTargetOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumLiquidityProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumCoinTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPcTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolTempTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolWithdrawQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lendingMarket", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lendingProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "farm", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "initializeLeveragedFarmOne", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "baseMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "quoteMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "feeReceiver", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lpTokenPriceAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "coinTokenPriceAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pcTokenPriceAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "coinReserveLiquidityFeeReceiver", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pcReserveLiquidityFeeReceiver", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lpDecimals", | |
"type": "u8" | |
}, | |
{ | |
"name": "baseDecimals", | |
"type": "u8" | |
}, | |
{ | |
"name": "quoteDecimals", | |
"type": "u8" | |
}, | |
{ | |
"name": "supportsFee", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "initializeLeveragedFarmTwo", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "baseReserve", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "quoteReserve", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "baseTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "quoteTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumOpenOrdersAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "buySlip", | |
"type": "u64" | |
}, | |
{ | |
"name": "sellSlip", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "createUserFarm", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "farmProgramId", | |
"type": "publicKey" | |
} | |
] | |
}, | |
{ | |
"name": "createUserFarmObligation", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "depositBorrowDual", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDepositReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDepositReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinReserveLiquidityOracle", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcReserveLiquidityOracle", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinSourceReserveLiquidityTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcSourceReserveLiquidityTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinReserveLiquidityFeeReceiver", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcReserveLiquidityFeeReceiver", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "borrowAuthorizer", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpPythPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "coinAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "coinBorrowAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcBorrowAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "swapTokensRaydiumStats", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapOrLiquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "swapTokensOrcaStats", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "market", | |
"accounts": [ | |
{ | |
"name": "market", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "requestQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "eventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "bids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "asks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orderPayerTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "addLiquidityStats", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "liquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMintAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "levFarmCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "levFarmPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pythPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "orcaAddLiquidityQueue", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "levFarmCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "levFarmPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "liquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMintAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "OrcaAddLiqQueueArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "depositOrcaVaultDd", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmDdTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardDdTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseDdTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmDdTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarmDd", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmDd", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardDdTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthorityDd", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedUserFarm", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "depositArgs", | |
"type": { | |
"defined": "DepositOrcaVaultArgs" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "depositOrcaVaultWithoutShares", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmOwner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orcaUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "fundingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "depositArgs", | |
"type": { | |
"defined": "DepositOrcaVaultArgs" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "depositOrcaVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmOwner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orcaUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "fundingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "depositArgs", | |
"type": { | |
"defined": "DepositOrcaVaultArgs" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "withdrawOrcaVaultDdClose", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmDdTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardDdTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseDdTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmDdTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarmDd", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmDd", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardDdTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthorityDd", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "withdrawPercent", | |
"type": "u8" | |
}, | |
{ | |
"name": "closeMethod", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "closePositionInfoAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "positionInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "withdrawOrcaVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmOwner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orcaUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "withdrawPercent", | |
"type": "u8" | |
}, | |
{ | |
"name": "closeMethod", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "withdrawOrcaVaultClose", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmOwner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orcaUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "withdrawPercent", | |
"type": "u8" | |
}, | |
{ | |
"name": "closeMethod", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "withdrawOrcaVaultWithoutShares", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmOwner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orcaUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "depositVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authorityTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stakeProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceMetadata", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "depositArgs", | |
"type": { | |
"defined": "DepositFarmArgs" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "withdrawRaydiumVaultClose", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authorityTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "stakeProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceMeta", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "withdrawArgs", | |
"type": { | |
"defined": "WithdrawFarmArgs" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "withdrawPercent", | |
"type": "u8" | |
}, | |
{ | |
"name": "closeMethod", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "removeLiquidityNew", | |
"accounts": [ | |
{ | |
"name": "removeLiq", | |
"accounts": [ | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "liquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMintAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTempLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "levFarmCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "levFarmPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "obligationVaultNonce", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "swapTokensSerum", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "market", | |
"accounts": [ | |
{ | |
"name": "market", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "requestQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "eventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "bids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "asks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orderPayerTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "swapTokensToRepayOrca", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "market", | |
"accounts": [ | |
{ | |
"name": "market", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "requestQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "eventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "bids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "asks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orderPayerTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "minCoinSwap", | |
"type": "u64" | |
}, | |
{ | |
"name": "minPcSwap", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "swapToRepayOrca", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "market", | |
"accounts": [ | |
{ | |
"name": "market", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "requestQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "eventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "bids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "asks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orderPayerTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "repayObligationLiquidity", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpPythPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "repayObligationLiquidityExternal", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpPythPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "harvestTulips", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTulipRewardMetadata", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTulipTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultTulipTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "authorityTulipTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "harvestArgs", | |
"type": { | |
"defined": "HarvestFarmTulipsArgs" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "startUserObligationLiquidation", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tempLiquidationLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tempLiquidationBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tempLiquidationQuoteTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "levfarmBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "levfarmQuoteTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pythPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "temporaryAccountNonce", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "startUserObligationLiquidationNew", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tempLiquidationLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tempLiquidationBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tempLiquidationQuoteTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "levfarmBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "levfarmQuoteTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pythPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "baseMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quoteMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "temporaryAccountNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "baseTokenAccountNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "quoteTokenAccountNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "lpTokenAccountNonce", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "startSsjUserLiquidationTest", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tempLiquidationLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tempLiquidationBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tempLiquidationQuoteTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "levfarmBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "levfarmQuoteTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pythPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "LiqArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "pullLpForLiquidationSplTokenSwap", | |
"accounts": [ | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawFarm", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmOwner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orcaUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "pullLpForLiquidationDoubleDip", | |
"accounts": [ | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawFarm", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmDdTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardDdTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseDdTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmDdTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarmDd", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmDd", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardDdTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthorityDd", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "pullLpForLiquidationOrcaWithoutShares", | |
"accounts": [ | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawFarm", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmOwner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orcaUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedUserFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "pullLpForLiquidation", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawFarm", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authorityTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPdaAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "stakeProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userBalanceMeta", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "metaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "removeLiquidityForLiquidation", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "removeLiquidity", | |
"accounts": [ | |
{ | |
"name": "removeLiq", | |
"accounts": [ | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "liquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMintAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTempLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "levFarmCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "levFarmPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "removeLiquidityForLiquidationImproved", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "removeLiquidity", | |
"accounts": [ | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "liquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMintAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTempLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "levFarmCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "levFarmPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "obligationLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "rayLiquidationSwap", | |
"accounts": [ | |
{ | |
"name": "raySwap", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapOrLiquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "splLiquidationSwapExperimental", | |
"accounts": [ | |
{ | |
"name": "serumSwap", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "market", | |
"accounts": [ | |
{ | |
"name": "market", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "requestQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "eventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "bids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "asks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orderPayerTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "setTemporaryLiquidationAccount", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "destinationLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sourceLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmManager", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmOwner", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "lpTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "index", | |
"type": "u8" | |
}, | |
{ | |
"name": "farm", | |
"type": { | |
"defined": "Farms" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "repayLiquidationDebt", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationLiquidity", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpPythPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "endObligationLiquidation", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "baseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "quoteTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "liquidatorBaseAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "liquidatorQuoteAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "liquidatorLpAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "endObligationLiquidationModified", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "baseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "quoteTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "liquidatorBaseAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "liquidatorQuoteAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "liquidatorLpAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "topUpPositionStats", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDepositReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDepositReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinReserveLiquidityOracle", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcReserveLiquidityOracle", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "coinAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "topUpPositionBorrowStats", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDepositReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDepositReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinReserveLiquidityOracle", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcReserveLiquidityOracle", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "borrowAuthorizer", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpPythPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sourceReserveLiquidityTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "reserveLiquidityFeeReceiver", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "coinAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "borrowAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "borrowToken", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "topUpPositionDualBorrowStats", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDepositReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDepositReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinReserveLiquidityOracle", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcReserveLiquidityOracle", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "borrowAuthorizer", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpPythPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinSourceReserveLiquidityTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcSourceReserveLiquidityTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinReserveLiquidityFeeReceiver", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcReserveLiquidityFeeReceiver", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "coinAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "coinBorrowAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcBorrowAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "order", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "forcePositionStateReset", | |
"accounts": [ | |
{ | |
"name": "userFarmAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "farm", | |
"type": "u64" | |
}, | |
{ | |
"name": "newState", | |
"type": "u64" | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "forceSyncPositionTokenAmounts", | |
"accounts": [ | |
{ | |
"name": "userFarmAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tempLiquidationBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tempLiquidationQuoteTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "farm", | |
"type": "u64" | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "moveTokensFromLevFarm", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "levFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "destinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "updateLeveragedFarmAccount", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "fieldName", | |
"type": "string" | |
}, | |
{ | |
"name": "fieldValue", | |
"type": "string" | |
}, | |
{ | |
"name": "raydiumUpdate", | |
"type": { | |
"defined": "RaydiumLevFarmUpdate" | |
} | |
}, | |
{ | |
"name": "acceptDanger", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "emergencyUserFarmLpTokenTransfer", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "destinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "emergencyLevFarmLpTokenTransfer", | |
"accounts": [ | |
{ | |
"name": "global", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userObligationLiquidation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "destinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "obligationVaultAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "swapTokensToRepayRaydiumNew", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapOrLiquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "minCoinSwap", | |
"type": "u64" | |
}, | |
{ | |
"name": "minPcSwap", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "swapTokensToRepayRaydium", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapOrLiquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "minCoinSwap", | |
"type": "u64" | |
}, | |
{ | |
"name": "minPcSwap", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "swapToRepayRaydium", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapOrLiquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenaccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "directDebtRepayment", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarmObligation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "leveragedFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcReserveAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpPythPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcPriceAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "coinRepayAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcRepayAmount", | |
"type": "u64" | |
} | |
] | |
} | |
], | |
"state": { | |
"struct": { | |
"name": "Global", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "authority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "whitelisted", | |
"type": { | |
"array": [ | |
"publicKey", | |
5 | |
] | |
} | |
} | |
] | |
} | |
}, | |
"methods": [ | |
{ | |
"name": "new", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "addWhitelisted", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [ | |
{ | |
"name": "toAdd", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "index", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "setAuthority", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [ | |
{ | |
"name": "auth", | |
"type": "publicKey" | |
} | |
] | |
} | |
] | |
}, | |
"accounts": [ | |
{ | |
"name": "LeveragedFarm", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "global", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "solfarmVaultProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "solfarmVaultAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumMarket", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumRequestQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumEventQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumMarketBids", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumMarketAsks", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumFeeRecipient", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumDexProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumBaseReferralAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumQuoteReferralAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumOpenOrdersAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumLpMintAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmOpenOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmQuantitiesOrTargetOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumLiquidityProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumCoinAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPcAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolTempTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolWithdrawQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lendingMarket", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lendingProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "baseMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "quoteMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "baseReserve", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "quoteReserve", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "baseTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "quoteTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lpDecimals", | |
"type": "u8" | |
}, | |
{ | |
"name": "baseDecimals", | |
"type": "u8" | |
}, | |
{ | |
"name": "quoteDecimals", | |
"type": "u8" | |
}, | |
{ | |
"name": "farmType", | |
"type": { | |
"defined": "Farms" | |
} | |
}, | |
{ | |
"name": "initialized", | |
"type": "bool" | |
}, | |
{ | |
"name": "supportsFee", | |
"type": "bool" | |
}, | |
{ | |
"name": "feeReceiver", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lpTokenPriceAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "coinPriceAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pcPriceAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "coinReserveLiquidityFeeReceiver", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pcReserveLiquidityFeeReceiver", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "borrowAuthorizer", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "borrowAuthorizerNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "buySlip", | |
"type": "u64" | |
}, | |
{ | |
"name": "sellSlip", | |
"type": "u64" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
304 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "UserFarm", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "authority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "leveragedFarm", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "userFarmNumber", | |
"type": "u8" | |
}, | |
{ | |
"name": "numberOfObligations", | |
"type": "u8" | |
}, | |
{ | |
"name": "numberOfUserFarms", | |
"type": "u8" | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "obligations", | |
"type": { | |
"array": [ | |
{ | |
"defined": "Obligation" | |
}, | |
3 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ObligationLiquidationAccount", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "userFarm", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "obligation", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "lpTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "baseTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "quoteTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "coinReturn", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcReturn", | |
"type": "u64" | |
}, | |
{ | |
"name": "farmKey", | |
"type": { | |
"defined": "Farms" | |
} | |
}, | |
{ | |
"name": "leveragedFarmAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "doubleDipLpTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "partialLiq", | |
"type": "bool" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
94 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "PositionInfo", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "coinDeposit", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcDeposit", | |
"type": "u64" | |
}, | |
{ | |
"name": "withdrawCoin", | |
"type": "u64" | |
}, | |
{ | |
"name": "withdrawPc", | |
"type": "u64" | |
}, | |
{ | |
"name": "openTime", | |
"type": "u32" | |
}, | |
{ | |
"name": "uselessField", | |
"type": "u16" | |
}, | |
{ | |
"name": "repayCoinPercent", | |
"type": "u16" | |
}, | |
{ | |
"name": "repayPcPercent", | |
"type": "u16" | |
}, | |
{ | |
"name": "bufferCoin", | |
"type": "u64" | |
}, | |
{ | |
"name": "bufferPc", | |
"type": "u64" | |
}, | |
{ | |
"name": "depositLp", | |
"type": "u64" | |
}, | |
{ | |
"name": "withdrawLp", | |
"type": "u64" | |
}, | |
{ | |
"name": "openCoinCost", | |
"type": "u64" | |
}, | |
{ | |
"name": "openPcCost", | |
"type": "u64" | |
}, | |
{ | |
"name": "withdrawCoinCost", | |
"type": "u64" | |
}, | |
{ | |
"name": "withdrawPcCost", | |
"type": "u64" | |
}, | |
{ | |
"name": "coinSwap", | |
"type": "i64" | |
}, | |
{ | |
"name": "pcSwap", | |
"type": "i64" | |
}, | |
{ | |
"name": "coinDepositLp", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcDepositLp", | |
"type": "u64" | |
}, | |
{ | |
"name": "coinWithdrawLp", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcWithdrawLp", | |
"type": "u64" | |
}, | |
{ | |
"name": "settleMethod", | |
"type": "u8" | |
}, | |
{ | |
"name": "withdrawPercent", | |
"type": "u32" | |
}, | |
{ | |
"name": "oldAccount", | |
"type": "bool" | |
}, | |
{ | |
"name": "closeMethod", | |
"type": "u8" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
130 | |
] | |
} | |
} | |
] | |
} | |
} | |
], | |
"types": [ | |
{ | |
"name": "Farms", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "RayUsdcVault" | |
}, | |
{ | |
"name": "RaySolVault" | |
}, | |
{ | |
"name": "RayUsdtVault" | |
}, | |
{ | |
"name": "RaySrmVault" | |
}, | |
{ | |
"name": "MerUsdcVault" | |
}, | |
{ | |
"name": "MediaUsdcVault" | |
}, | |
{ | |
"name": "CopeUsdcVault" | |
}, | |
{ | |
"name": "RayEthVault" | |
}, | |
{ | |
"name": "StepUsdcVault" | |
}, | |
{ | |
"name": "RopeUsdcVault" | |
}, | |
{ | |
"name": "AlephUsdcVault" | |
}, | |
{ | |
"name": "TulipUsdcVault" | |
}, | |
{ | |
"name": "SnyUsdcVault" | |
}, | |
{ | |
"name": "BopRayVault" | |
}, | |
{ | |
"name": "SlrsUsdcVault" | |
}, | |
{ | |
"name": "SamoRayVault" | |
}, | |
{ | |
"name": "LikeUsdcVault" | |
}, | |
{ | |
"name": "OrcaUsdcVault" | |
}, | |
{ | |
"name": "OrcaSolVault" | |
}, | |
{ | |
"name": "AtlasUsdcVault" | |
}, | |
{ | |
"name": "AtlasRayVault" | |
}, | |
{ | |
"name": "PolisUsdcVault" | |
}, | |
{ | |
"name": "PolisRayVault" | |
}, | |
{ | |
"name": "EthUsdcOrcaVault" | |
}, | |
{ | |
"name": "SolUsdcOrcaVault" | |
}, | |
{ | |
"name": "SolUsdtOrcaVault" | |
}, | |
{ | |
"name": "EthSolOrcaVault" | |
}, | |
{ | |
"name": "AtlasUsdcOrcaVault" | |
}, | |
{ | |
"name": "PolisUsdcOrcaVault" | |
}, | |
{ | |
"name": "whEthUsdcOrcaVault" | |
}, | |
{ | |
"name": "whEthSolOrcaVault" | |
}, | |
{ | |
"name": "mSolUsdcRayVault" | |
}, | |
{ | |
"name": "mSolUsdtRayVault" | |
}, | |
{ | |
"name": "EthMSolRayVault" | |
}, | |
{ | |
"name": "BtcMSolRayVault" | |
}, | |
{ | |
"name": "mSolRayRayVault" | |
}, | |
{ | |
"name": "SamoRayRayVault" | |
}, | |
{ | |
"name": "SamoUsdcOrcaVault" | |
}, | |
{ | |
"name": "SrmUsdcRayVault" | |
}, | |
{ | |
"name": "whEthUsdcRayVault" | |
}, | |
{ | |
"name": "whEthSolRayVault" | |
}, | |
{ | |
"name": "weSushiUsdcRayVault" | |
}, | |
{ | |
"name": "weUniUsdcRayVault" | |
}, | |
{ | |
"name": "StarsUsdcRayVault" | |
}, | |
{ | |
"name": "weDydxUsdcRayVault" | |
}, | |
{ | |
"name": "GeneUsdcRayVault" | |
}, | |
{ | |
"name": "GeneRayRayVault" | |
}, | |
{ | |
"name": "DflUsdcRayVault" | |
}, | |
{ | |
"name": "CaveUsdcRayVault" | |
}, | |
{ | |
"name": "wbWBNBUsdcRayVault" | |
}, | |
{ | |
"name": "SolUsdcRayVault" | |
}, | |
{ | |
"name": "SolUsdtRayVault" | |
}, | |
{ | |
"name": "RealUsdcRayVault" | |
}, | |
{ | |
"name": "PrsmUsdcRayVault" | |
}, | |
{ | |
"name": "MbsUsdcRayVault" | |
}, | |
{ | |
"name": "ShdwUsdcOrcaVault" | |
}, | |
{ | |
"name": "ShdwSolOrcaVault" | |
}, | |
{ | |
"name": "BasisUsdcOrcVault" | |
}, | |
{ | |
"name": "stSolUsdcOrcaVault" | |
}, | |
{ | |
"name": "stSolUsdcRayVault" | |
}, | |
{ | |
"name": "stSolUsdtRayVault" | |
}, | |
{ | |
"name": "BtcstSolRayVault" | |
}, | |
{ | |
"name": "EthstSolRayVault" | |
}, | |
{ | |
"name": "stSolwUstOrcaVault" | |
}, | |
{ | |
"name": "GstUsdcOrcaVault" | |
}, | |
{ | |
"name": "ZbcUsdcRayVault" | |
}, | |
{ | |
"name": "wAlephUsdcRayVault" | |
}, | |
{ | |
"name": "SlclUsdcRayVault" | |
}, | |
{ | |
"name": "PrismUsdcRayVault" | |
}, | |
{ | |
"name": "SlcUsdcRayVault" | |
}, | |
{ | |
"name": "HbbUsdhRayVault" | |
}, | |
{ | |
"name": "UsdhUsdcRayVault" | |
}, | |
{ | |
"name": "sRlySolOrcaVault" | |
}, | |
{ | |
"name": "HawkUsdcRayVault" | |
}, | |
{ | |
"name": "GmtUsdcOrcaVault" | |
}, | |
{ | |
"name": "RaywhEthRayVault" | |
}, | |
{ | |
"name": "Unknown" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Position", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Opening" | |
}, | |
{ | |
"name": "Swapped" | |
}, | |
{ | |
"name": "AddedLiquidity" | |
}, | |
{ | |
"name": "Opened" | |
}, | |
{ | |
"name": "Withdrawing" | |
}, | |
{ | |
"name": "RemovedLiquidity" | |
}, | |
{ | |
"name": "SwappedForRepaying" | |
}, | |
{ | |
"name": "Repaid" | |
}, | |
{ | |
"name": "Withdrawn" | |
}, | |
{ | |
"name": "Closing" | |
}, | |
{ | |
"name": "ClosingAndExiting" | |
}, | |
{ | |
"name": "Closed" | |
}, | |
{ | |
"name": "ExitingAndLiquidated" | |
}, | |
{ | |
"name": "Liquidated" | |
}, | |
{ | |
"name": "TopUp" | |
}, | |
{ | |
"name": "Borrowed" | |
}, | |
{ | |
"name": "TopUpSwapped" | |
}, | |
{ | |
"name": "TopUpAddedLiquidity" | |
}, | |
{ | |
"name": "DepositedOrcaAquaFarm" | |
}, | |
{ | |
"name": "WithdrawnOrcaDoubleDip" | |
}, | |
{ | |
"name": "SwappedForLiquidation" | |
}, | |
{ | |
"name": "RepaidForLiquidation" | |
}, | |
{ | |
"name": "DDPulledForLiquidation" | |
}, | |
{ | |
"name": "LPPulledForLiquidation" | |
}, | |
{ | |
"name": "RemovedLiquidityForLiquidation" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Obligation", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "obligationAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "coinAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "depositedLpTokens", | |
"type": "u64" | |
}, | |
{ | |
"name": "positionState", | |
"type": { | |
"defined": "Position" | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "BorrowedAsset", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "reserve", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "DepositedAsset", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "reserve", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "amount", | |
"type": "u64" | |
}, | |
{ | |
"name": "returnAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "penaltyAmount", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "AddLiquidityArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "coinTakepnl", | |
"type": "u64" | |
}, | |
{ | |
"name": "pcTakepnl", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Side", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Bid" | |
}, | |
{ | |
"name": "Ask" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "DepositFarmArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "metaNonce", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "WithdrawFarmArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "metaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "HarvestFarmTulipsArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "metaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "rewardNonce", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "RaydiumLevFarmUpdate", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "raydiumLpMintAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmOpenOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmQuantitiesOrTargetOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumLiquidityProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumCoinAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPcAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolTempTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolWithdrawQueue", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "DepositOrcaVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "accountNonce", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "OrcaAddLiqQueueArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "accountNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "LiqArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "reserves", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "obligationIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "temporaryAccountNonce", | |
"type": "u8" | |
} | |
] | |
} | |
} | |
], | |
"errors": [ | |
{ | |
"code": 100, | |
"name": "Unauthorized", | |
"msg": "unauthorized access" | |
}, | |
{ | |
"code": 101, | |
"name": "TooManyReserves", | |
"msg": "market has too many reserves" | |
}, | |
{ | |
"code": 102, | |
"name": "InvalidReserveCount", | |
"msg": "given reserves does not match remaining accounts length" | |
}, | |
{ | |
"code": 103, | |
"name": "NoReserveSpaceLeft", | |
"msg": "obligation has no reserve space available for action" | |
}, | |
{ | |
"code": 104, | |
"name": "UnknownReserve", | |
"msg": "unknown reserve given" | |
}, | |
{ | |
"code": 105, | |
"name": "InvalidReferralAccount", | |
"msg": "invalid referral account given" | |
}, | |
{ | |
"code": 106, | |
"name": "InvalidFarmProgram", | |
"msg": "invalid farm program given" | |
}, | |
{ | |
"code": 107, | |
"name": "InvalidDestinationCollateralTokenAccount", | |
"msg": "invalid destination collateral token account given" | |
}, | |
{ | |
"code": 108, | |
"name": "InvalidSourceCollateralTokenAccount", | |
"msg": "invalid source collateral token account given" | |
}, | |
{ | |
"code": 109, | |
"name": "InvalidLendingMarket", | |
"msg": "invalid lending market given" | |
}, | |
{ | |
"code": 110, | |
"name": "InvalidLendingProgram", | |
"msg": "invalid lending program given" | |
}, | |
{ | |
"code": 111, | |
"name": "InvalidUserFarmManager", | |
"msg": "user farm manager is invalid" | |
}, | |
{ | |
"code": 112, | |
"name": "InvalidLeveragedFarm", | |
"msg": "invalid leveraged farm given" | |
}, | |
{ | |
"code": 113, | |
"name": "InvalidObligationAccount", | |
"msg": "invalid obligation account given" | |
}, | |
{ | |
"code": 114, | |
"name": "InvalidSourceLiquidityTokenAccount", | |
"msg": "invalid source liquidity token account given" | |
}, | |
{ | |
"code": 115, | |
"name": "InvalidPCWallet", | |
"msg": "invalid pc wallet given" | |
}, | |
{ | |
"code": 116, | |
"name": "InvalidOrderPayer", | |
"msg": "invalid order payer account given" | |
}, | |
{ | |
"code": 117, | |
"name": "InvalidCoinWallet", | |
"msg": "invalid coin wallet given" | |
}, | |
{ | |
"code": 118, | |
"name": "InvalidSerumOpenOrders", | |
"msg": "invalid serum open orders account given" | |
}, | |
{ | |
"code": 119, | |
"name": "InvalidPCVault", | |
"msg": "invalid serum pc vault given" | |
}, | |
{ | |
"code": 120, | |
"name": "InvalidCoinVault", | |
"msg": "invalid serum coin vault given" | |
}, | |
{ | |
"code": 121, | |
"name": "InvalidAsks", | |
"msg": "invalid serum asks given" | |
}, | |
{ | |
"code": 122, | |
"name": "InvalidBids", | |
"msg": "invalid serum bids given" | |
}, | |
{ | |
"code": 123, | |
"name": "InvalidMarket", | |
"msg": "invalid serum market given" | |
}, | |
{ | |
"code": 124, | |
"name": "InvalidRequestQueue", | |
"msg": "invalid serum request queue given" | |
}, | |
{ | |
"code": 125, | |
"name": "InvalidEventQueue", | |
"msg": "invalid serum event queue given" | |
}, | |
{ | |
"code": 126, | |
"name": "InvalidOpenOrders", | |
"msg": "invalid serum open orders account" | |
}, | |
{ | |
"code": 127, | |
"name": "InvalidAmmId", | |
"msg": "invalid raydium amm id" | |
}, | |
{ | |
"code": 128, | |
"name": "InvalidAmmAuthority", | |
"msg": "invalid raydium amm authority" | |
}, | |
{ | |
"code": 129, | |
"name": "InvalidAmmOpenOrders", | |
"msg": "invalid raydium amm open orders" | |
}, | |
{ | |
"code": 130, | |
"name": "InvalidAmmQuantitiesOrTargetOrders", | |
"msg": "invalid raydium amm quantities or target ordres" | |
}, | |
{ | |
"code": 131, | |
"name": "InvalidLpMint", | |
"msg": "invalid lp token mint" | |
}, | |
{ | |
"code": 132, | |
"name": "InvalidFarmTokenAccount", | |
"msg": "invalid farm coin or farm pc token account" | |
}, | |
{ | |
"code": 133, | |
"name": "InvalidLpToken", | |
"msg": "invalid lp token account given" | |
}, | |
{ | |
"code": 134, | |
"name": "InvalidLiquidityProgram", | |
"msg": "invalid liquidity program given" | |
}, | |
{ | |
"code": 135, | |
"name": "InvalidPoolTokenAccount", | |
"msg": "invalid pool coin or pc token account" | |
}, | |
{ | |
"code": 136, | |
"name": "InvalidPoolWithdrawQueue", | |
"msg": "invalid pool withdraw queue given" | |
}, | |
{ | |
"code": 137, | |
"name": "InvalidSerumProgram", | |
"msg": "invalid serum dex program given" | |
}, | |
{ | |
"code": 138, | |
"name": "InvalidUserVaultAccount", | |
"msg": "invalid solfarm vault user balance or metadata account" | |
}, | |
{ | |
"code": 139, | |
"name": "AlreadyInitialized", | |
"msg": "leveraged farm is already initialized" | |
}, | |
{ | |
"code": 140, | |
"name": "Uninitialized", | |
"msg": "leveraged farm is uninitialized" | |
}, | |
{ | |
"code": 141, | |
"name": "InvalidBaseMint", | |
"msg": "invalid base token mint" | |
}, | |
{ | |
"code": 142, | |
"name": "InvalidQuoteMint", | |
"msg": "invalid quote mint" | |
}, | |
{ | |
"code": 143, | |
"name": "InvalidTokenOwner", | |
"msg": "invalid token owner" | |
}, | |
{ | |
"code": 144, | |
"name": "InvalidReferral", | |
"msg": "referral account is none or incorrect account" | |
}, | |
{ | |
"code": 145, | |
"name": "TooManyObligations", | |
"msg": "too many obligations already created, please use a different account" | |
}, | |
{ | |
"code": 146, | |
"name": "InvalidObligationIndex", | |
"msg": "obligation index is invalid" | |
}, | |
{ | |
"code": 147, | |
"name": "ObligationIsClosing", | |
"msg": "obligation account is closing, liquidation in process" | |
}, | |
{ | |
"code": 148, | |
"name": "ObligationIsOpen", | |
"msg": "obligation must be closing to be liquidated" | |
}, | |
{ | |
"code": 149, | |
"name": "InvalidTokenAccount", | |
"msg": "invalid token account given" | |
}, | |
{ | |
"code": 150, | |
"name": "ObligationIsLiquidated", | |
"msg": "the obligation account has been liquidated please close" | |
}, | |
{ | |
"code": 151, | |
"name": "ObligationIsNotLiquidated", | |
"msg": "obligation account must be liquidated to proceed" | |
}, | |
{ | |
"code": 152, | |
"name": "UnhealthyObligation", | |
"msg": "obligation is unhealthy" | |
}, | |
{ | |
"code": 153, | |
"name": "ObligationIsExiting", | |
"msg": "obligation is already exiting" | |
}, | |
{ | |
"code": 154, | |
"name": "InvalidPythPriceAccount", | |
"msg": "invalid pyth price account given" | |
}, | |
{ | |
"code": 155, | |
"name": "InvalidAccountOwner", | |
"msg": "Input account owner is not the program address" | |
}, | |
{ | |
"code": 156, | |
"name": "InvalidAccountInput", | |
"msg": "Invalid account input" | |
}, | |
{ | |
"code": 157, | |
"name": "ReserveStale", | |
"msg": "Reserve state needs to be refreshed" | |
}, | |
{ | |
"code": 158, | |
"name": "HealthyAccount", | |
"msg": "Trying to start liquidation on healthy account" | |
}, | |
{ | |
"code": 159, | |
"name": "InsufficientTokenAmount", | |
"msg": "zero base and quote tokens in obligation" | |
}, | |
{ | |
"code": 160, | |
"name": "DepositTooLowOrTooHigh", | |
"msg": "deposit is below the minimum required amount or above the limit" | |
}, | |
{ | |
"code": 161, | |
"name": "NotEnoughCollateral", | |
"msg": "not enough collateral to borrow this amount" | |
}, | |
{ | |
"code": 162, | |
"name": "InvalidOracleConfig", | |
"msg": "Input oracle config is invalid" | |
}, | |
{ | |
"code": 163, | |
"name": "InvalidPositionState", | |
"msg": "Invalid position state" | |
}, | |
{ | |
"code": 164, | |
"name": "InvalidFeeReceiver", | |
"msg": "Invalid fee receier" | |
}, | |
{ | |
"code": 165, | |
"name": "InvalidVaultAccount", | |
"msg": "Invalid vault account" | |
}, | |
{ | |
"code": 166, | |
"name": "InvalidProdBool", | |
"msg": "Flip prod bool" | |
}, | |
{ | |
"code": 167, | |
"name": "HighSpread", | |
"msg": "High Spread" | |
}, | |
{ | |
"code": 168, | |
"name": "HighSlippage", | |
"msg": "High Slippage" | |
}, | |
{ | |
"code": 169, | |
"name": "InvalidWithdrawAmount", | |
"msg": "Invalid Withdraw Amount" | |
}, | |
{ | |
"code": 170, | |
"name": "InvalidBorrowToken", | |
"msg": "Invalid Borrow Token" | |
} | |
] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"version": "0.1.0", | |
"name": "jupiter", | |
"instructions": [ | |
{ | |
"name": "mercurialExchange", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapState", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "sourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "destinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "saberExchange", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swap", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "inputUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "inputTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "outputUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "outputTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "saberSwap", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swap", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "inputUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "inputTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "outputUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "outputTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "saberAddDecimalsDeposit", | |
"accounts": [ | |
{ | |
"name": "addDecimalsProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "wrapper", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "wrapperMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "wrapperUnderlyingTokens", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "owner", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userUnderlyingTokens", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userWrappedTokens", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "saberAddDecimalsWithdraw", | |
"accounts": [ | |
{ | |
"name": "addDecimalsProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "wrapper", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "wrapperMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "wrapperUnderlyingTokens", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "owner", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userUnderlyingTokens", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userWrappedTokens", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "senchaExchange", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swap", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "inputUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "inputTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "inputFeesAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "outputUserAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "outputTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "outputFeesAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "serumSwap", | |
"accounts": [ | |
{ | |
"name": "market", | |
"accounts": [ | |
{ | |
"name": "market", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "requestQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "eventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "bids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "asks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "orderPayerTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "side", | |
"type": { | |
"defined": "Side" | |
} | |
}, | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "tokenSwap", | |
"accounts": [ | |
{ | |
"name": "tokenSwapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swap", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "source", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapSource", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapDestination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "destination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolFee", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "stepTokenSwap", | |
"accounts": [ | |
{ | |
"name": "tokenSwapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swap", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "source", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapSource", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapDestination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "destination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolFee", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "cropperTokenSwap", | |
"accounts": [ | |
{ | |
"name": "tokenSwapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swap", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapState", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "source", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapSource", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapDestination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "destination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolFee", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "raydiumSwap", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userSourceOwner", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "raydiumSwapV2", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userSourceOwner", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "aldrinSwap", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pool", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "baseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "quoteTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feePoolTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "walletAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userQuoteTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "side", | |
"type": { | |
"defined": "Side" | |
} | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "aldrinV2Swap", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pool", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "baseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "quoteTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feePoolTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "walletAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "userBaseTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userQuoteTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "curve", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "side", | |
"type": { | |
"defined": "Side" | |
} | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "cremaTokenSwap", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTicksAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "walletAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "lifinityTokenSwap", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "amm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "sourceInfo", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "destinationInfo", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapSource", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapDestination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pythAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pythPcAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "configAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "cykuraSwap", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "signer", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "factoryState", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolState", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "inputTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "outputTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "inputVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "outputVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lastObservationState", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coreProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "whirlpoolSwap", | |
"accounts": [ | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenOwnerAccountA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenOwnerAccountB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArray0", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArray1", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArray2", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "oracle", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "inAmount", | |
"type": { | |
"option": "u64" | |
} | |
}, | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "aToB", | |
"type": "bool" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "riskCheckAndFee", | |
"accounts": [ | |
{ | |
"name": "tokenLedger", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userTransferAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "minimumOutAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFeeBps", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "initializeTokenLedger", | |
"accounts": [ | |
{ | |
"name": "tokenLedger", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "payer", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "setTokenLedger", | |
"accounts": [ | |
{ | |
"name": "tokenLedger", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenAccount", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "createOpenOrders", | |
"accounts": [ | |
{ | |
"name": "openOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "payer", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "dexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "market", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
} | |
], | |
"accounts": [ | |
{ | |
"name": "TokenLedger", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "tokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
} | |
} | |
], | |
"types": [ | |
{ | |
"name": "Swap", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "tokens", | |
"type": "u64" | |
}, | |
{ | |
"name": "minTokens", | |
"type": "u64" | |
}, | |
{ | |
"name": "side", | |
"type": { | |
"defined": "Side" | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Swap", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "tokens", | |
"type": "u64" | |
}, | |
{ | |
"name": "minTokens", | |
"type": "u64" | |
}, | |
{ | |
"name": "side", | |
"type": { | |
"defined": "Side" | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Swap", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "amountIn", | |
"type": "u64" | |
}, | |
{ | |
"name": "minimumAmountOut", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Swap", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
}, | |
{ | |
"name": "otherAmountThreshold", | |
"type": "u64" | |
}, | |
{ | |
"name": "sqrtPriceLimit", | |
"type": "u128" | |
}, | |
{ | |
"name": "amountSpecifiedIsInput", | |
"type": "bool" | |
}, | |
{ | |
"name": "aToB", | |
"type": "bool" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "SwapInstrution", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Swap", | |
"fields": [ | |
{ | |
"defined": "Swap" | |
} | |
] | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Side", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Bid" | |
}, | |
{ | |
"name": "Ask" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Direction", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "LeftToRight" | |
}, | |
{ | |
"name": "RightToLeft" | |
} | |
] | |
} | |
} | |
], | |
"errors": [ | |
{ | |
"code": 6000, | |
"name": "SlippageToleranceExceeded", | |
"msg": "Slippage tolerance exceeded" | |
}, | |
{ | |
"code": 6001, | |
"name": "InvalidTokenLedger", | |
"msg": "Invalid token ledger" | |
}, | |
{ | |
"code": 6002, | |
"name": "MissingTokenLedger", | |
"msg": "Missing token ledger" | |
}, | |
{ | |
"code": 6003, | |
"name": "MissingMercurialExchangeTokenAccount", | |
"msg": "Missing mercurial exchange token account" | |
}, | |
{ | |
"code": 6004, | |
"name": "LedgerTokenAccountDoesNotMatch", | |
"msg": "Ledger token account does not match" | |
}, | |
{ | |
"code": 6005, | |
"name": "MissingPlatformFeeAccount", | |
"msg": "Missing platform fee account" | |
}, | |
{ | |
"code": 6006, | |
"name": "InvalidCalculation", | |
"msg": "Invalid calculation" | |
} | |
] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
"""Adapted from https://github.com/kevinheavey/anchorpy""" | |
from hashlib import sha256 | |
from typing import Dict, Any, Tuple, cast, TypeVar, Protocol, Mapping | |
from types import MappingProxyType | |
from solana import publickey | |
from construct import Int8ul as U8 | |
from construct import Int32ul as U32 | |
from borsh_construct import ( | |
CStruct, | |
TupleStruct, | |
Vec, | |
Enum, | |
Bool, | |
I8, | |
U16, | |
I16, | |
I32, | |
F32, | |
U64, | |
I64, | |
F64, | |
U128, | |
I128, | |
Bytes, | |
String, | |
Option, | |
) | |
from construct import Sequence, Bytes | |
from construct import Construct, Adapter, Switch, Container, IfThenElse, Padding | |
def sighash(ix_name: str) -> bytes: | |
"""Not technically sighash, since we don't include the arguments. | |
(Because Rust doesn't allow function overloading.) | |
Args: | |
ix_name: The instruction name. | |
Returns: | |
The sighash bytes. | |
""" | |
formatted_str = f"global:{ix_name}" | |
return sha256(formatted_str.encode()).digest()[:8] | |
class COption(Adapter): | |
_discriminator_key = "discriminator" | |
_value_key = "value" | |
def __init__(self, subcon: Construct) -> None: | |
option_struct = CStruct( | |
self._discriminator_key / U8, | |
self._value_key | |
/ IfThenElse( | |
lambda this: this[self._discriminator_key] == 0, | |
Padding(subcon.sizeof()), | |
subcon, | |
), | |
) | |
super().__init__(option_struct) # type: ignore | |
def _decode(self, obj: Any, context, path) -> Any: | |
discriminator = obj[self._discriminator_key] | |
return None if discriminator == 0 else obj[self._value_key] | |
def _encode(self, obj, context, path) -> dict: | |
discriminator = 0 if obj is None else 1 | |
return {self._discriminator_key: discriminator, self._value_key: obj} | |
def parse_ix_layout(idl: dict[str,Any]) -> Dict[str, Construct]: | |
ix_layout: Dict[str, Construct] = {} | |
for ix in idl['instructions']: | |
typedefs = idl['accounts'] + idl['types'] | |
field_layouts = [ | |
_field_layout(arg, typedefs) | |
for arg in ix['args'] | |
] | |
ix_layout[ix['name']] = ix['name'] / CStruct(*field_layouts) | |
return ix_layout | |
FIELD_TYPE_MAP: Mapping[str, Construct] = MappingProxyType( | |
{ | |
"bool": Bool, | |
"u8": U8, | |
"i8": I8, | |
"u16": U16, | |
"i16": I16, | |
"u32": U32, | |
"i32": I32, | |
"f32": F32, | |
"u64": U64, | |
"i64": I64, | |
"f64": F64, | |
"u128": U128, | |
"i128": I128, | |
"bytes": Bytes, | |
"string": String, | |
"publicKey": BorshPubkey, | |
}, | |
) | |
_enums_cache: dict[tuple[str, str], Enum] = {} | |
def _handle_enum_variants(idl_enum: str, types: Any, name: str) -> Enum: | |
dict_key = (name, str(idl_enum)) | |
try: | |
return _enums_cache[dict_key] | |
except KeyError: | |
result = _handle_enum_variants_no_cache(idl_enum, types, name) | |
_enums_cache[dict_key] = result | |
return result | |
def _handle_enum_variants_no_cache(idl_enum: dict[str, Any], types: dict[str, Any], name: str)) -> Enum: | |
variants = [] | |
dclasses = {} | |
for variant in idl_enum['variants']: | |
variant_name = variant['name'] | |
if variant['fields'] is None: | |
variants.append(variant_name) | |
else: | |
variant_fields = variant['fields'] | |
if isinstance(variant_fields[0], _IdlField): | |
fields = [] | |
named_fields = cast(_IdlEnumFieldsNamed, variant_fields) | |
for fld in named_fields: | |
fields.append(_field_layout(fld, types)) | |
cstruct = CStruct(*fields) | |
datacls = _idl_enum_fields_named_to_dataclass_type( | |
named_fields, | |
variant_name, | |
) | |
dclasses[variant_name] = datacls | |
renamed = variant_name / cstruct | |
else: | |
fields = [] | |
unnamed_fields = cast(_IdlEnumFieldsTuple, variant_fields) | |
for type_ in unnamed_fields: | |
fields.append(_type_layout(type_, types)) | |
tuple_struct = TupleStruct(*fields) | |
renamed = variant_name / tuple_struct | |
variants.append(renamed) # type: ignore | |
enum_without_types = Enum(*variants, enum_name=name) | |
if dclasses: | |
for cname in enum_without_types.enum._sumtype_constructor_names: | |
try: | |
dclass = dclasses[cname] | |
except KeyError: | |
continue | |
dclass_fields = dc_fields(dclass) | |
constructr = getattr(enum_without_types.enum, cname) | |
for constructor_field in constructr._sumtype_attribs: | |
attrib = constructor_field[1] # type: ignore | |
fld_name = constructor_field[0] # type: ignore | |
dclass_field = [f for f in dclass_fields if f.name == fld_name][0] | |
attrib.type = dclass_field.type # type: ignore | |
return enum_without_types | |
def _typedef_layout_without_field_name( | |
typedef: _AccountDefOrTypeDef, | |
types: _AccountDefsOrTypeDefs, | |
) -> Construct: | |
typedef_type = typedef.type | |
name = typedef.name | |
if isinstance(typedef_type, _IdlTypeDefTyStruct): | |
field_layouts = [_field_layout(field, types) for field in typedef_type.fields] | |
cstruct = CStruct(*field_layouts) | |
datacls = _idl_typedef_ty_struct_to_dataclass_type(typedef_type, name) | |
return _DataclassStruct(cstruct, datacls=datacls) | |
elif isinstance(typedef_type, _IdlTypeDefTyEnum): | |
return _handle_enum_variants(typedef_type, types, name) | |
unknown_type = typedef_type.kind | |
raise ValueError(f"Unknown type {unknown_type}") | |
def _typedef_layout( | |
typedef: _AccountDefOrTypeDef, | |
types: list[_IdlTypeDef], | |
field_name: str, | |
) -> Construct: | |
"""Map an IDL typedef to a `Construct` object. | |
Args: | |
typedef: The IDL typedef object. | |
types: IDL type definitions. | |
field_name: The name of the field. | |
Raises: | |
ValueError: If an unknown type is passed. | |
Returns: | |
`Construct` object from `borsh-construct`. | |
""" # noqa: DAR402 | |
return field_name / _typedef_layout_without_field_name(typedef, types) | |
def _type_layout(type_: _IdlType, types: _AccountDefsOrTypeDefs) -> Construct: | |
if isinstance(type_, str): | |
return FIELD_TYPE_MAP[type_] | |
field_type = cast( | |
_NonLiteralIdlTypes, | |
type_, | |
) | |
if isinstance(field_type, _IdlTypeVec): | |
return Vec(_type_layout(field_type.vec, types)) | |
elif isinstance(field_type, _IdlTypeOption): | |
return Option(_type_layout(field_type.option, types)) | |
elif isinstance(field_type, _IdlTypeCOption): | |
return COption(_type_layout(field_type.coption, types)) | |
elif isinstance(field_type, _IdlTypeDefined): | |
defined = field_type.defined | |
if not types: | |
raise ValueError("User defined types not provided") | |
filtered = [t for t in types if t.name == defined] | |
if len(filtered) != 1: | |
raise ValueError(f"Type not found {defined}") | |
return _typedef_layout_without_field_name(filtered[0], types) | |
elif isinstance(field_type, _IdlTypeArray): | |
array_ty = field_type.array[0] | |
array_len = field_type.array[1] | |
inner_layout = _type_layout(array_ty, types) | |
return inner_layout[array_len] | |
raise ValueError(f"Type {field_type} not implemented yet") | |
def _field_layout(field: _IdlField, types: _AccountDefsOrTypeDefs) -> Construct: | |
"""Map IDL spec to `borsh-construct` types. | |
Args: | |
field: field object from the IDL. | |
types: IDL type definitions. | |
Raises: | |
ValueError: If the user-defined types are not provided. | |
ValueError: If the type is not found. | |
ValueError: If the type is not implemented yet. | |
Returns: | |
`Construct` object from `borsh-construct`. | |
""" # noqa: DAR402 | |
field_name = field.name if field.name else "" | |
return field_name / _type_layout(field.type, types) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"version": "0.1.0", | |
"name": "vaults", | |
"instructions": [ | |
{ | |
"name": "initialize", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradeAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradePda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumRebateAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "newVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradeAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradeOpenOrdersAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradePda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradeMarket", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumDexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "NewVaultArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "createSerumTradeFeeRecipient", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradeAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradePda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumFeeRecipient", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "createSerumTradeOpenOrders", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradeAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradePda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradeOpenOrdersAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumDexProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "modifyWhitelist", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "whitelistAuthority", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "ModifyWhiteListArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "registerDepositTrackingAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingQueueAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingHoldAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
} | |
] | |
}, | |
{ | |
"name": "issueShares", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTracking", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUnderlyingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingSharesAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositingUnderlyingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "SharesArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "permissionedIssueShares", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUnderlyingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingSharesAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositingUnderlyingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "SharesArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "configureRaydiumVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userStakeInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "raydiumStakeProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "associatedStakeAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "ConfigureRaydiumVaultArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "configureLendingOptimizer", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "startingPlatformInformation", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "configureMultiDepositOptimizer", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stateTransitionAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "stateTransitionUnderlying", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "ConfigureMultiDepositOptimizerArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "configureOrcaVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSwapTokenAccountA", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSwapTokenAccountB", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapTokenA", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapTokenB", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenMintA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenMintB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "ConfigureArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "configureOrcaVaultDd", | |
"accounts": [ | |
{ | |
"name": "ddCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ddWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ddCompoundQueueMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "configData", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSwapTokenAccountA", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSwapTokenAccountB", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapTokenA", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapTokenB", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenMintA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenMintB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "ConfigureArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "lendingOptimizerAddPlatform", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformInformation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformConfigData", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "AddLendingPlatformArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "sweepRaydiumVault", | |
"accounts": [ | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultStakeInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "raydiumStakeProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "harvest", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "sweepLendingOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformInformation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformConfigData", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDestination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "withdrawDepositTracking", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingHoldAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingSharesAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
}, | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
} | |
] | |
}, | |
{ | |
"name": "withdrawRaydiumVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultStakeInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardATokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolRewardBTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "burningSharesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingUnderlyingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "raydiumStakeProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "withdrawLendingOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformInformation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformConfigData", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "burningSharesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingUnderlyingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "withdrawMultiDepositOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "multiDeposit", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiDepositPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawVaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformInformation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformConfigData", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiBurningSharesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawBurningSharesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingUnderlyingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiUnderlyingWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiSharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawSharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawVaultUnderlyingDepositQueue", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "newSerumSwap", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcWallet", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "market", | |
"accounts": [ | |
{ | |
"name": "market", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "openOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "requestQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "eventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "bids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "asks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "orderPayerTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "pcVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "coinWallet", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "dexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradeAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradePda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumFeeRecipient", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumFeeDiscount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "NewSerumSwapArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "newRaydiumSwap", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapOrLiquidityProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumDexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "NewRaydiumSwapArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "closeVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
} | |
] | |
}, | |
{ | |
"name": "closeDepositTracking", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingHold", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "authorityShares", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "addRaydiumLiquidity", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "liquidityProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammAuthority", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ammQuantitiesOrTargetOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "lpMintAddress", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUnderlyingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgramId", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "updateRaydiumVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "ConfigureRaydiumVaultArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "updateLendingOptimizerVaultPlatformSettings", | |
"accounts": [ | |
{ | |
"name": "update", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "platformInformation", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformConfigData", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "UpdateArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "rebalanceLendingOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sourcePlatformInformation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "destinationPlatformInformation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sourceLendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "destinationLendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDestination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "rebalanceMultiDepositOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stateTransition", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiVaultSharesMint", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "calldata", | |
"type": "bytes" | |
} | |
] | |
}, | |
{ | |
"name": "forceRebalanceMultiDepositOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stateTransition", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiVaultSharesMint", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "calldata", | |
"type": "bytes" | |
} | |
] | |
}, | |
{ | |
"name": "resetStateTransitionAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stateTransition", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiVaultSharesMint", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "resetPausable", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "startMultiDepositOptimizerRebalance", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stateTransition", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiVaultSharesMint", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "StartMultiDepositRebalanceArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "removeVaultMultiDepositOptimizerRebalance", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stateTransition", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiVaultSharesMint", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "supplyVaultMultiDepositOptimizerRebalance", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stateTransition", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiVaultSharesMint", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "rebaseLendingOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformInformation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformConfigData", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeReceiver", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "forceRebaseLendingOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformInformation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformConfigData", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeReceiver", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "rebaseMultiDepositOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "forceRebaseMultiDepositOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "sweepMultiDepositOptimizer", | |
"accounts": [ | |
{ | |
"name": "multiDepositOptimizer", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiOptimizerPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "standaloneVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "standalonePda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDestination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "standaloneSharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiOptimizerSharesAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "changeMultiDepositOptimizerTarget", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiDepositOptimizer", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "newTarget", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "updateLendingOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "UpdateArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "updateMultiDepositOptimizerVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "UpdateArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "orcaAddLiqIssueShares", | |
"accounts": [ | |
{ | |
"name": "issueShares", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTracking", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositTrackingPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUnderlyingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingSharesAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "depositingUnderlyingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "addLiq", | |
"accounts": [ | |
{ | |
"name": "fundingTokenAccountA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "fundingTokenAccountB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapPoolTokenMint", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "OrcaAddLiqIssueSharesArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "sweepOrcaVault", | |
"accounts": [ | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquafarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "harvest", | |
"type": "bool" | |
}, | |
{ | |
"name": "doubleDip", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "sweepOrcaVaultDd", | |
"accounts": [ | |
{ | |
"name": "configData", | |
"accounts": [ | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquafarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "harvest", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "withdrawOrcaVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "burningSharesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingUnderlyingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSwapTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapPoolTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapPoolFee", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquafarmProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "WithdrawOrcaVaultArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "withdrawOrcaVaultDdStageOne", | |
"accounts": [ | |
{ | |
"name": "configData", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "burningSharesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingUnderlyingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSwapTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapPoolTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapPoolFee", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquafarmProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "WithdrawOrcaVaultArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "withdrawOrcaVaultDdStageTwo", | |
"accounts": [ | |
{ | |
"name": "configData", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "burningSharesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingUnderlyingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSwapTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapPoolTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapPoolFee", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquafarmProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "ephemeralTrackingAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "withdrawOrcaVaultRemoveLiq", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "burningUnderlyingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "removeLiq", | |
"accounts": [ | |
{ | |
"name": "fundingTokenAccountA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "fundingTokenAccountB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapPoolTokenMint", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "swapFeeAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ephemeralTrackingAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "doubleDip", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "newOrcaSwap", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "destinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapSourceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapDestinationTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolFeeAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "OrcaSwapArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "addOrcaLiquidity", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "addLiq", | |
"accounts": [ | |
{ | |
"name": "fundingTokenAccountA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "fundingTokenAccountB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapPoolTokenMint", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "doubleDip", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "addOrcaLiquidityAndConvertDd", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "addLiq", | |
"accounts": [ | |
{ | |
"name": "fundingTokenAccountA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "fundingTokenAccountB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapPoolTokenMint", | |
"isMut": true, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ddCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "convertAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquafarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "updateOrcaDdCompoundQueueStageOne", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ddCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "yourReceivingFarmToken", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "updateOrcaDdCompoundQueueStageTwo", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ddCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "yourReceivingFarmToken", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "updateOnly", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "letMeSpeakToYourManager", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTrade", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "updateDepositCap", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "UpdateDepositCapArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "updateVaultFees", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "UpdateVaultFeesArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "createAssociatedLedgerAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userStakeInfoAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "raydiumStakeProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolId", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "associatedStakeAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "emitVersionInfo", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "manageVaultPausable", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "ManageVaultPausableArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "multiDepositOptimizerAddStandalone", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stateTransitionAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "stateTransitionUnderlying", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "ConfigureMultiDepositOptimizerArgs" | |
} | |
}, | |
{ | |
"name": "update", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "collectSerumTradeFees", | |
"accounts": [ | |
{ | |
"name": "vaultFees", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeRecipient", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "serumTrade", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradePda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradeFeeAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "farmKey", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
} | |
] | |
}, | |
{ | |
"name": "overrideVaultValues", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "farmKey", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "field", | |
"type": "string" | |
}, | |
{ | |
"name": "value", | |
"type": "string" | |
} | |
] | |
}, | |
{ | |
"name": "updateOrcaSwapMarkets", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSwapTokenAccountA", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSwapTokenAccountB", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapTokenA", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapTokenB", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenMintA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenMintB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "ConfigureArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "updateOrcaDdSwapMarkets", | |
"accounts": [ | |
{ | |
"name": "ddCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ddWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "ddCompoundQueueMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "configData", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "userFarm", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalFarm", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSwapTokenAccountA", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSwapTokenAccountB", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapTokenA", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolSwapTokenB", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenMintA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenMintB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "aquaFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "ConfigureArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "configureQuarryVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "miner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "minerTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "minerTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "mintWrapper", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "minter", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "mineProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "ConfigureQuarryArgs" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "sweepQuarryVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "miner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "minerVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryMineProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "compound", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "harvestQuarryVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "miner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "minerVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "mintWrapper", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "minter", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardsTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "claimFeeTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "mintWrapperProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryMineProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "redeemSaberIouMint", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultIouTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRedemptionTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "iouTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "redemptionMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "redemptionVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "redeemer", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "mintProxyState", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "proxyMintAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "minterInfo", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeCollectorTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "mintProxyProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "redemptionProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "saberAddLiquidity", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultTokenAAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultTokenBAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPoolTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapTokenAAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "swapTokenBAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "stableSwapProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "initializeQuarrySaberConfigDataAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "configDataAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "InitializeSaberConfigurationData" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "saberDecimalWrapAsset", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "configDataAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "wrapper", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "wrapperMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "wrapperUnderlyingTokens", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultUnwrappedTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultWrappedTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "decimalWrapProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "wrappingA", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "initializeSunnyVaultStageOne", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSunnyVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "miner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "minerVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMiner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMinerTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyPool", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyQuarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRewardTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSunnyRewardTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyInternalTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSunnyInternalTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryRewardTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryMintWrapper", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryMinter", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryRewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyQuarryProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "mineProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "initializeSunnyVaultStageTwo", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSunnyVaultAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "configDataAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "miner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "minerVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMiner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMinerTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyPool", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyQuarry", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyInternalTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSunnyInternalTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSunnyRewardTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryRewardTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryMintWrapper", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryMinter", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryRewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRewardTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyQuarryProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "mineProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "InitializeSaberConfigurationData" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "sweepSunnyVault", | |
"accounts": [ | |
{ | |
"name": "sweepData", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "miner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "minerVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryMineProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "configData", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultVendorTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyQuarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyPool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyTvault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyInternalMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSunnyInternalTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMiner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMinerTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyQuarryProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "compound", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "harvestSunnyVault", | |
"accounts": [ | |
{ | |
"name": "harvestData", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "miner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "minerVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "mintWrapper", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "minter", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardsTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "claimFeeTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "mintWrapperProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarryMineProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
] | |
}, | |
{ | |
"name": "configData", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSaberRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSunnyRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultVendorTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSunnyInternalTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRewardTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyPool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyTvault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyQuarryProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMintWrapper", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMinter", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyClaimFeeTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyQuarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMiner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMinerVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "harvestQuarry", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "withdrawSunnyVaultRewards", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "configData", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyPool", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyTvault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSaberRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tvaultSunnyRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSaberRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSunnyRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "saberClaimFeeTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyClaimFeeTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyQuarryProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "redeemSunnyVaultRewards", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "saberRewardTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRewardTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSaberRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSunnyRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSaberTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultSunnyTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "saberTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "saberRedemptionVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRedemptionVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "saberRedeemer", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRedeemer", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "saberMinterInfo", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMinterInfo", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMintWrapper", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "saberMintProxyState", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "saberProxyMintAuthority", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeCollectorSaberTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeCollectorSunnyTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMinterProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "saberMintProxyProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRedemptionProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "saberRedemptionProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "withdrawSunnyVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "configData", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyInternalMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyTvaultVendorTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyTvaultInternalTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyPool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyTvault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyQuarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMiner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyMinerVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyRewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "miner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "minerVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "burningSharesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingUnderlyingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeDestination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "mineProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "sunnyQuarryProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "withdrawQuarryVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewarder", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "quarry", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "miner", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "minerVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "burningSharesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingUnderlyingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeDestination", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "mineProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "configureAtrixVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAtrixStakerAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultAtrixHarvesterAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "cropAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "atrixFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "dualCrop", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "sweepAtrixVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultStakerAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmStakeTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "cropAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "cropRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultHarvesterAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "atrixFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "compound", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "withdrawAtrixVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultStakerAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmStakeTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "cropAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "cropRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultHarvesterAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "burningSharesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "receivingUnderlyingTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "atrixFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "harvestAtrixVault", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultStakerAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "farmStakeTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "cropAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "cropRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultHarvesterAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeCollectorTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "sharesMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "atrixFarmProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "addAtrixLiquidity", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "protocolAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "poolLpTokenMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultCoinTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPcTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarket", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "atrixOpenOrders", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumRequestQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumEventQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarketBids", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumMarketAsks", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumCoinVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumPcVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumVaultSigner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "atrixPoolProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumDexProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "action", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "initializeStrategyAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "strategyType", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "registerStrategyAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "strategyType", | |
"type": "u64" | |
}, | |
{ | |
"name": "data", | |
"type": "bytes" | |
} | |
] | |
}, | |
{ | |
"name": "executeStrategy", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "args", | |
"type": { | |
"defined": "StrategyExecutionArgs" | |
} | |
}, | |
{ | |
"name": "data", | |
"type": "bytes" | |
} | |
] | |
}, | |
{ | |
"name": "registerStrategyBalanceAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyBalanceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingTokenMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "ataProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "strategyType", | |
"type": "u64" | |
}, | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
} | |
] | |
}, | |
{ | |
"name": "vaultDepositStrategyAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultStrategyBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultStrategyBalanceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "strategyType", | |
"type": "u64" | |
}, | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "vaultWithdrawStrategyAccount", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultStrategyBalanceAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "vaultStrategyBalanceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "strategyType", | |
"type": "u64" | |
}, | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "withdrawMultiDepositOptimizerVaultToStrategy", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "multiDeposit", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiDepositPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawVaultPda", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformInformation", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "platformConfigData", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "lendingProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawBurningSharesTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "strategyBalanceTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiUnderlyingWithdrawQueue", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "multiSharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawSharesMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "clock", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "withdrawVaultUnderlyingDepositQueue", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "adjustSerumTradeSlippage", | |
"accounts": [ | |
{ | |
"name": "authority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "management", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "serumTradeAccount", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "slippage", | |
"type": "u64" | |
} | |
] | |
} | |
], | |
"accounts": [ | |
{ | |
"name": "SerumTradeAccount", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "serumRebateAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pda", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pdaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "slippage", | |
"type": "u64" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
919 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "BorrowLend", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "accountAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pdaAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "totalDepositedBalance", | |
"type": "u64" | |
}, | |
{ | |
"name": "totalIssuedShares", | |
"type": "u64" | |
}, | |
{ | |
"name": "totalDepositedBalanceInUse", | |
"type": "u64" | |
}, | |
{ | |
"name": "currentIteration", | |
"type": "u64" | |
}, | |
{ | |
"name": "maxIterations", | |
"type": "u64" | |
}, | |
{ | |
"name": "configAccountIndex", | |
"type": "u64" | |
}, | |
{ | |
"name": "amountBorrowed", | |
"type": "u64" | |
}, | |
{ | |
"name": "pnlGains", | |
"type": "u64" | |
}, | |
{ | |
"name": "pnlLosses", | |
"type": "u64" | |
}, | |
{ | |
"name": "balanceAfterLastExecution", | |
"type": "u64" | |
}, | |
{ | |
"name": "balanceBeforeLastExecution", | |
"type": "u64" | |
}, | |
{ | |
"name": "addressCounter", | |
"type": "u64" | |
}, | |
{ | |
"name": "pdaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "sourcePlatform", | |
"type": "u8" | |
}, | |
{ | |
"name": "destinationPlatform", | |
"type": "u8" | |
}, | |
{ | |
"name": "enabled", | |
"type": "bool" | |
}, | |
{ | |
"name": "pendingWithdraws", | |
"type": "bool" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
512 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "StrategyBalanceAccount", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "totalDepositedBalance", | |
"type": "u64" | |
}, | |
{ | |
"name": "totalIssuedShares", | |
"type": "u64" | |
}, | |
{ | |
"name": "strategyAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "authority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pnlGains", | |
"type": "u64" | |
}, | |
{ | |
"name": "pnlLosses", | |
"type": "u64" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
32 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "AtrixVaultV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "base", | |
"type": { | |
"defined": "VaultBaseV1" | |
} | |
}, | |
{ | |
"name": "atrixFarmAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultStakerAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultHarvesterAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "dualCrop", | |
"type": "u8" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
519 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "LendingOptimizerV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "base", | |
"type": { | |
"defined": "VaultBaseV1" | |
} | |
}, | |
{ | |
"name": "currentFarmProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "currentPlatformInformation", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "currentPlatformCount", | |
"type": "u64" | |
}, | |
{ | |
"name": "lastRebaseSlot", | |
"type": "u64" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
1000 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "LendingPlatformV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "vault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "programAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "programType", | |
"type": { | |
"defined": "ProgramType" | |
} | |
}, | |
{ | |
"name": "configDataAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "index", | |
"type": "u64" | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
256 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "SplLendingConfig", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "collateralMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "reserveAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "reserveLiquidityAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "lendingMarketAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "derivedLendingMarketAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "collateralTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "oracleKeys", | |
"type": { | |
"array": [ | |
"publicKey", | |
3 | |
] | |
} | |
}, | |
{ | |
"name": "oraclePrograms", | |
"type": { | |
"array": [ | |
"publicKey", | |
3 | |
] | |
} | |
}, | |
{ | |
"name": "informationAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "obligationAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
224 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "MangoV3Config", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "mangoGroupAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "mangoAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "mangoCache", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "mangoRootBank", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "mangoNodeBank", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "mangoGroupTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "informationAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
256 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "MultiDepositOptimizerV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "base", | |
"type": { | |
"defined": "VaultBaseV1" | |
} | |
}, | |
{ | |
"name": "lastRebaseSlot", | |
"type": "u64" | |
}, | |
{ | |
"name": "standaloneVaults", | |
"type": { | |
"array": [ | |
{ | |
"defined": "StandaloneVaultCacheV1" | |
}, | |
6 | |
] | |
} | |
}, | |
{ | |
"name": "targetVault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "stateTransitionAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "minimumRebalanceAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "balanceAvailableForStrategy", | |
"type": "u64" | |
}, | |
{ | |
"name": "balanceInUsedByStrategy", | |
"type": "u64" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
256 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "RebalanceStateTransitionV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "optimizerVault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultRemovalAmountA", | |
"type": "u64" | |
}, | |
{ | |
"name": "vaultSupplyAmountB", | |
"type": "u64" | |
}, | |
{ | |
"name": "unusedTwo", | |
"type": "u64" | |
}, | |
{ | |
"name": "unusedThree", | |
"type": "u64" | |
}, | |
{ | |
"name": "vaultAddressA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultAddressB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultAProgramType", | |
"type": { | |
"defined": "ProgramType" | |
} | |
}, | |
{ | |
"name": "vaultBProgramType", | |
"type": { | |
"defined": "ProgramType" | |
} | |
}, | |
{ | |
"name": "state", | |
"type": { | |
"defined": "RebalanceStates" | |
} | |
}, | |
{ | |
"name": "lastCompletionTs", | |
"type": "i64" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
256 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "OrcaVaultV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "base", | |
"type": { | |
"defined": "VaultBaseV1" | |
} | |
}, | |
{ | |
"name": "farmData", | |
"type": { | |
"defined": "OrcaVaultDataV1" | |
} | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
135 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "OrcaDoubleDipVaultV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "base", | |
"type": { | |
"defined": "VaultBaseV1" | |
} | |
}, | |
{ | |
"name": "farmData", | |
"type": { | |
"defined": "OrcaVaultDataV1" | |
} | |
}, | |
{ | |
"name": "ddFarmData", | |
"type": { | |
"defined": "OrcaVaultDataV1" | |
} | |
}, | |
{ | |
"name": "ddCompoundQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "ddCompoundQueueNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "ddConfigured", | |
"type": "u8" | |
}, | |
{ | |
"name": "ddWithdrawQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "ddWithdrawQueueNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
35 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "QuarryVaultV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "base", | |
"type": { | |
"defined": "VaultBaseV1" | |
} | |
}, | |
{ | |
"name": "miner", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "minerTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "mintWrapper", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "minter", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "quarry", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rewarder", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rewardTokenMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rewardTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "swapMarkets", | |
"type": { | |
"array": [ | |
"publicKey", | |
3 | |
] | |
} | |
}, | |
{ | |
"name": "variant", | |
"type": { | |
"defined": "QuarryVariant" | |
} | |
}, | |
{ | |
"name": "configData", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "configDataInitialized", | |
"type": "u8" | |
}, | |
{ | |
"name": "extraDataAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
263 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "SaberConfigurationDataV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "vault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "isDecimalWrappedA", | |
"type": "u8" | |
}, | |
{ | |
"name": "isDecimalWrappedB", | |
"type": "u8" | |
}, | |
{ | |
"name": "wrapperMintA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperAccountA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperAccountB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperMintB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "extraDataAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
256 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "SunnyConfigurationDataV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "vault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "isDecimalWrappedA", | |
"type": "u8" | |
}, | |
{ | |
"name": "isDecimalWrappedB", | |
"type": "u8" | |
}, | |
{ | |
"name": "wrapperMintA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperAccountA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperAccountB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperMintB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyPool", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyTvault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyMiner", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyMinerTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyRewarder", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "extraDataAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
128 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "RaydiumVaultV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "base", | |
"type": { | |
"defined": "VaultBaseV1" | |
} | |
}, | |
{ | |
"name": "raydiumLpMintAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmOpenOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmQuantitiesOrTargetOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumStakeProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumLiquidityProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumCoinTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPcTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolTempTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolLpTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolWithdrawQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolRewardATokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolRewardBTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "dualRewards", | |
"type": "u8" | |
}, | |
{ | |
"name": "vaultRewardATokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultRewardBTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultStakeInfoAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "associatedStakeInfoAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "coinMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pcMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumMarket", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
407 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Management", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "authority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "whitelistedEntries", | |
"type": { | |
"array": [ | |
{ | |
"defined": "WhitelistEntry" | |
}, | |
10 | |
] | |
} | |
}, | |
{ | |
"name": "strategyCounterOne", | |
"type": "u8" | |
}, | |
{ | |
"name": "specialDepositorSetOne", | |
"type": { | |
"array": [ | |
"publicKey", | |
3 | |
] | |
} | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
698 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "DepositTrackingV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "owner", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pdaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "queueNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "alignment", | |
"type": { | |
"array": [ | |
"u8", | |
6 | |
] | |
} | |
}, | |
{ | |
"name": "shares", | |
"type": "u64" | |
}, | |
{ | |
"name": "depositedBalance", | |
"type": "u64" | |
}, | |
{ | |
"name": "lastDepositTime", | |
"type": "i64" | |
}, | |
{ | |
"name": "pendingWithdrawAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "totalDepositedUnderlying", | |
"type": "u64" | |
}, | |
{ | |
"name": "totalWithdrawnUnderlying", | |
"type": "u64" | |
}, | |
{ | |
"name": "lastPendingReward", | |
"type": "u64" | |
}, | |
{ | |
"name": "rewardPerSharePaid", | |
"type": "u128" | |
}, | |
{ | |
"name": "extraDataAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
256 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "EphemeralTrackingV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "authority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "availableForWithdraw", | |
"type": "u64" | |
}, | |
{ | |
"name": "liqToRemove", | |
"type": "u64" | |
}, | |
{ | |
"name": "configured", | |
"type": "u8" | |
}, | |
{ | |
"name": "canWithdraw", | |
"type": "u8" | |
}, | |
{ | |
"name": "metadataOne", | |
"type": { | |
"array": [ | |
"u8", | |
64 | |
] | |
} | |
}, | |
{ | |
"name": "metadataTwo", | |
"type": { | |
"array": [ | |
"u8", | |
64 | |
] | |
} | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
254 | |
] | |
} | |
} | |
] | |
} | |
} | |
], | |
"types": [ | |
{ | |
"name": "InitSerumTradeAccountArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "serumRebateAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pda", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pdaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "slippage", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ConfigureAtrixVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "atrixFarmAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultStakerAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultHarvesterAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "dualCrop", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "StandaloneVaultCacheV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "vaultAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "depositedBalance", | |
"type": "u64" | |
}, | |
{ | |
"name": "programType", | |
"type": { | |
"defined": "ProgramType" | |
} | |
}, | |
{ | |
"name": "programAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sharesMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sharesAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "alignment", | |
"type": { | |
"array": [ | |
"u8", | |
7 | |
] | |
} | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u64", | |
6 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "OrcaVaultDataV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "userFarmAddr", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "userFarmNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "vaultSwapTokenA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultSwapTokenB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolSwapTokenA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolSwapTokenB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolSwapAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultSwapTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "globalFarm", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "farmTokenMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rewardTokenMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "swapPoolMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "tokenAMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "tokenBMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "swapMarkets", | |
"type": { | |
"array": [ | |
"publicKey", | |
3 | |
] | |
} | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u8", | |
32 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ConfigureOrcaVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "userFarmAddr", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "userFarmNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "vaultSwapTokenA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultSwapTokenB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolSwapTokenA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolSwapTokenB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "poolSwapAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultRewardTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultFarmTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultSwapTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "globalFarm", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "globalBaseTokenVault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "globalRewardTokenVault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "farmTokenMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rewardTokenMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "swapPoolMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "tokenAMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "tokenBMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "swapMarkets", | |
"type": { | |
"array": [ | |
"publicKey", | |
3 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ConfigureQuarryVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "miner", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "minerTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "quarry", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rewarder", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rewardTokenMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "mintWrapper", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "minter", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "variant", | |
"type": { | |
"defined": "QuarryVariant" | |
} | |
}, | |
{ | |
"name": "requiresConfigDataAccount", | |
"type": "bool" | |
}, | |
{ | |
"name": "swapMarkets", | |
"type": { | |
"array": [ | |
"publicKey", | |
3 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ConfigureSunnyVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "sunnyTvault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyPool", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyRewardTokenMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "tvaultSunnyRewardTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyInternalTokenMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "tvaultSunnyInternalTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyRewarder", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyQuarry", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyMiner", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sunnyMinerTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "isDecimalWrappedA", | |
"type": "u8" | |
}, | |
{ | |
"name": "isDecimalWrappedB", | |
"type": "u8" | |
}, | |
{ | |
"name": "wrapperMintA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperAccountA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperAccountB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperMintB", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "InitializeSaberConfigurationData", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "isDecimalWrappedA", | |
"type": "u8" | |
}, | |
{ | |
"name": "isDecimalWrappedB", | |
"type": "u8" | |
}, | |
{ | |
"name": "wrapperMintA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperAccountA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperAccountB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "wrapperMintB", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ConfigureRaydiumVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "raydiumPoolId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumLpMintAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmId", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmOpenOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumAmmQuantitiesOrTargetOrders", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumLiquidityProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumStakeProgram", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumCoinTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPcTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolTempTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolWithdrawQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolRewardATokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolRewardBTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "raydiumPoolLpTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultStakeInfoAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "dualRewards", | |
"type": "bool" | |
}, | |
{ | |
"name": "vaultRewardATokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vaultRewardBTokenAccount", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "coinTokenMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pcTokenMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "serumMarket", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "WhitelistEntry", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "authority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "roles", | |
"type": { | |
"array": [ | |
{ | |
"defined": "Roles" | |
}, | |
3 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "FeesV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "feeMultiplier", | |
"type": "u64" | |
}, | |
{ | |
"name": "controllerFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "withdrawFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "depositFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "feeWallet", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "totalCollectedA", | |
"type": "u64" | |
}, | |
{ | |
"name": "totalCollectedB", | |
"type": "u64" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u64", | |
6 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "RealizedYield", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "gainPerSecond", | |
"type": "u128" | |
}, | |
{ | |
"name": "apr", | |
"type": "u128" | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u64", | |
4 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "VaultBaseV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "nonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "tag", | |
"type": { | |
"array": [ | |
"u8", | |
32 | |
] | |
} | |
}, | |
{ | |
"name": "pda", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "pdaNonce", | |
"type": "u8" | |
}, | |
{ | |
"name": "pdaAlignment", | |
"type": { | |
"array": [ | |
"u8", | |
6 | |
] | |
} | |
}, | |
{ | |
"name": "totalDepositedBalance", | |
"type": "u64" | |
}, | |
{ | |
"name": "totalShares", | |
"type": "u64" | |
}, | |
{ | |
"name": "underlyingMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "underlyingWithdrawQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "underlyingDepositQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "underlyingCompoundQueue", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sharesMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "withdrawsPaused", | |
"type": "u8" | |
}, | |
{ | |
"name": "depositsPaused", | |
"type": "u8" | |
}, | |
{ | |
"name": "compoundPaused", | |
"type": "u8" | |
}, | |
{ | |
"name": "supportsCompound", | |
"type": "u8" | |
}, | |
{ | |
"name": "rebasePaused", | |
"type": "u8" | |
}, | |
{ | |
"name": "rebalancePaused", | |
"type": "u8" | |
}, | |
{ | |
"name": "stateAlignment", | |
"type": { | |
"array": [ | |
"u8", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "precisionFactor", | |
"type": "u64" | |
}, | |
{ | |
"name": "lastCompoundTime", | |
"type": "i64" | |
}, | |
{ | |
"name": "compoundInterval", | |
"type": "i64" | |
}, | |
{ | |
"name": "slippageTolerance", | |
"type": "u8" | |
}, | |
{ | |
"name": "slipAlignment", | |
"type": { | |
"array": [ | |
"u8", | |
7 | |
] | |
} | |
}, | |
{ | |
"name": "fees", | |
"type": { | |
"defined": "FeesV1" | |
} | |
}, | |
{ | |
"name": "farm", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "configured", | |
"type": "u8" | |
}, | |
{ | |
"name": "configuredAlignment", | |
"type": { | |
"array": [ | |
"u8", | |
7 | |
] | |
} | |
}, | |
{ | |
"name": "pendingFees", | |
"type": "u64" | |
}, | |
{ | |
"name": "totalDepositedBalanceCap", | |
"type": "u64" | |
}, | |
{ | |
"name": "realizedYield", | |
"type": { | |
"defined": "RealizedYield" | |
} | |
}, | |
{ | |
"name": "buffer", | |
"type": { | |
"array": [ | |
"u64", | |
4 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "InitFeeArgsV1", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "feeMultiplier", | |
"type": "u64" | |
}, | |
{ | |
"name": "controllerFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "withdrawFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "depositFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "feeWallet", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ModifyWhiteListArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "role", | |
"type": "u8" | |
}, | |
{ | |
"name": "action", | |
"type": "u8" | |
}, | |
{ | |
"name": "modifySpecialDepositorSet", | |
"type": "bool" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "MultiDepositRebalanceWorkloopArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "calldata", | |
"type": "bytes" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "AddLendingPlatformArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "programType", | |
"type": "u64" | |
}, | |
{ | |
"name": "oracleKeys", | |
"type": { | |
"vec": "publicKey" | |
} | |
}, | |
{ | |
"name": "oraclePrograms", | |
"type": { | |
"vec": "publicKey" | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ConfigureMultiDepositOptimizerArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "vaults", | |
"type": { | |
"vec": { | |
"defined": "StandaloneVaultArgs" | |
} | |
} | |
}, | |
{ | |
"name": "startingTargetVault", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "StandaloneVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "vaultAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "programType", | |
"type": "u64" | |
}, | |
{ | |
"name": "programAddress", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "sharesMint", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "StartMultiDepositRebalanceArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "removeAmount", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "OrcaAddLiqIssueSharesArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "tokenAmountA", | |
"type": "u64" | |
}, | |
{ | |
"name": "tokenAmountB", | |
"type": "u64" | |
}, | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "WithdrawOrcaVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "doubleDip", | |
"type": "bool" | |
}, | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "UpdateDepositCapArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "newCap", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "UpdateVaultFeesArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "feeMultiplier", | |
"type": "u64" | |
}, | |
{ | |
"name": "controllerFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "platformFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "withdrawFee", | |
"type": "u64" | |
}, | |
{ | |
"name": "depositFee", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "OrcaSwapArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "transferInAmount", | |
"type": "u64" | |
}, | |
{ | |
"name": "transferIn", | |
"type": "bool" | |
}, | |
{ | |
"name": "fullAmount", | |
"type": "bool" | |
}, | |
{ | |
"name": "checkSwapSkip", | |
"type": "bool" | |
}, | |
{ | |
"name": "doubleDip", | |
"type": "bool" | |
}, | |
{ | |
"name": "quarry", | |
"type": "bool" | |
}, | |
{ | |
"name": "bypassSafetyChecks", | |
"type": "bool" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "NewSerumSwapArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "amount", | |
"type": "u64" | |
}, | |
{ | |
"name": "side", | |
"type": "u64" | |
}, | |
{ | |
"name": "checkSerumSwapSkip", | |
"type": "bool" | |
}, | |
{ | |
"name": "fullAmount", | |
"type": "bool" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "NewVaultArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "compoundInterval", | |
"type": "i64" | |
}, | |
{ | |
"name": "tag", | |
"type": { | |
"array": [ | |
"u8", | |
32 | |
] | |
} | |
}, | |
{ | |
"name": "feeArgs", | |
"type": { | |
"defined": "InitFeeArgsV1" | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ManageVaultPausableArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "pause", | |
"type": "bool" | |
}, | |
{ | |
"name": "action", | |
"type": "u8" | |
}, | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "NewRaydiumSwapArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "aToB", | |
"type": "bool" | |
}, | |
{ | |
"name": "checkSwapSkip", | |
"type": "bool" | |
}, | |
{ | |
"name": "fullAmount", | |
"type": "bool" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ConfigureArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "swapMarkets", | |
"type": { | |
"vec": "publicKey" | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ConfigureQuarryArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "common", | |
"type": { | |
"defined": "ConfigureArgs" | |
} | |
}, | |
{ | |
"name": "variant", | |
"type": "u64" | |
}, | |
{ | |
"name": "requiresConfigDataAccount", | |
"type": "bool" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "UpdateArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "field", | |
"type": "string" | |
}, | |
{ | |
"name": "values", | |
"type": { | |
"vec": "string" | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "SharesArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "farmType", | |
"type": { | |
"array": [ | |
"u64", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "amount", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "StrategyExecutionArgs", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "strategyType", | |
"type": "u64" | |
}, | |
{ | |
"name": "finalize", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Atrix", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "SOLUSDC" | |
}, | |
{ | |
"name": "GMTUSDC" | |
}, | |
{ | |
"name": "mSOLUSDC" | |
}, | |
{ | |
"name": "BTCUSDC" | |
}, | |
{ | |
"name": "USDrUSDC" | |
}, | |
{ | |
"name": "PLACEHOLDER_E" | |
}, | |
{ | |
"name": "PLACEHOLDER_F" | |
}, | |
{ | |
"name": "PLACEHOLDER_G" | |
}, | |
{ | |
"name": "PLACEHOLDER_H" | |
}, | |
{ | |
"name": "PLACEHOLDER_I" | |
}, | |
{ | |
"name": "PLACEHOLDER_J" | |
}, | |
{ | |
"name": "PLACEHOLDER_K" | |
}, | |
{ | |
"name": "PLACEHOLDER_L" | |
}, | |
{ | |
"name": "PLACEHOLDER_M" | |
}, | |
{ | |
"name": "PLACEHOLDER_N" | |
}, | |
{ | |
"name": "PLACEHOLDER_O" | |
}, | |
{ | |
"name": "PLACEHOLDER_P" | |
}, | |
{ | |
"name": "PLACEHOLDER_Q" | |
}, | |
{ | |
"name": "PLACEHOLDER_R" | |
}, | |
{ | |
"name": "PLACEHOLDER_S" | |
}, | |
{ | |
"name": "PLACEHOLDER_T" | |
}, | |
{ | |
"name": "PLACEHOLDER_U" | |
}, | |
{ | |
"name": "PLACEHOLDER_V" | |
}, | |
{ | |
"name": "PLACEHOLDER_W" | |
}, | |
{ | |
"name": "PLACEHOLDER_X" | |
}, | |
{ | |
"name": "PLACEHOLDER_Y" | |
}, | |
{ | |
"name": "PLACEHOLDER_Z" | |
}, | |
{ | |
"name": "UNKNOWN" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Lending", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "TULIP" | |
}, | |
{ | |
"name": "SOLEND" | |
}, | |
{ | |
"name": "MANGO" | |
}, | |
{ | |
"name": "PORT" | |
}, | |
{ | |
"name": "LARIX" | |
}, | |
{ | |
"name": "PARROT" | |
}, | |
{ | |
"name": "USDC" | |
}, | |
{ | |
"name": "MULTI_DEPOSIT" | |
}, | |
{ | |
"name": "RAY" | |
}, | |
{ | |
"name": "USDT" | |
}, | |
{ | |
"name": "SOL" | |
}, | |
{ | |
"name": "PLACEHOLDER_E" | |
}, | |
{ | |
"name": "PLACEHOLDER_F" | |
}, | |
{ | |
"name": "PLACEHOLDER_G" | |
}, | |
{ | |
"name": "PLACEHOLDER_H" | |
}, | |
{ | |
"name": "PLACEHOLDER_I" | |
}, | |
{ | |
"name": "PLACEHOLDER_J" | |
}, | |
{ | |
"name": "PLACEHOLDER_K" | |
}, | |
{ | |
"name": "PLACEHOLDER_L" | |
}, | |
{ | |
"name": "PLACEHOLDER_M" | |
}, | |
{ | |
"name": "PLACEHOLDER_N" | |
}, | |
{ | |
"name": "PLACEHOLDER_O" | |
}, | |
{ | |
"name": "PLACEHOLDER_P" | |
}, | |
{ | |
"name": "PLACEHOLDER_Q" | |
}, | |
{ | |
"name": "PLACEHOLDER_R" | |
}, | |
{ | |
"name": "PLACEHOLDER_S" | |
}, | |
{ | |
"name": "PLACEHOLDER_T" | |
}, | |
{ | |
"name": "PLACEHOLDER_U" | |
}, | |
{ | |
"name": "PLACEHOLDER_V" | |
}, | |
{ | |
"name": "PLACEHOLDER_W" | |
}, | |
{ | |
"name": "PLACEHOLDER_X" | |
}, | |
{ | |
"name": "PLACEHOLDER_Y" | |
}, | |
{ | |
"name": "PLACEHOLDER_Z" | |
}, | |
{ | |
"name": "UNKNOWN" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Orca", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "ATLASUSDC" | |
}, | |
{ | |
"name": "POLISUSDC" | |
}, | |
{ | |
"name": "ORCASOL" | |
}, | |
{ | |
"name": "USDTUSDC" | |
}, | |
{ | |
"name": "ORCAUSDC" | |
}, | |
{ | |
"name": "BASISUSDC" | |
}, | |
{ | |
"name": "SAMOUSDC" | |
}, | |
{ | |
"name": "SHDWUSDC" | |
}, | |
{ | |
"name": "SHDWSOL" | |
}, | |
{ | |
"name": "stSOLUSDC" | |
}, | |
{ | |
"name": "wUSTUSDC" | |
}, | |
{ | |
"name": "CMFIUSDC" | |
}, | |
{ | |
"name": "stSOLwUST" | |
}, | |
{ | |
"name": "sRLYSOL" | |
}, | |
{ | |
"name": "PLACEHOLDER_D" | |
}, | |
{ | |
"name": "PLACEHOLDER_E" | |
}, | |
{ | |
"name": "PLACEHOLDER_F" | |
}, | |
{ | |
"name": "PLACEHOLDER_G" | |
}, | |
{ | |
"name": "PLACEHOLDER_H" | |
}, | |
{ | |
"name": "PLACEHOLDER_I" | |
}, | |
{ | |
"name": "PLACEHOLDER_J" | |
}, | |
{ | |
"name": "PLACEHOLDER_K" | |
}, | |
{ | |
"name": "PLACEHOLDER_L" | |
}, | |
{ | |
"name": "PLACEHOLDER_M" | |
}, | |
{ | |
"name": "PLACEHOLDER_N" | |
}, | |
{ | |
"name": "PLACEHOLDER_O" | |
}, | |
{ | |
"name": "PLACEHOLDER_P" | |
}, | |
{ | |
"name": "PLACEHOLDER_Q" | |
}, | |
{ | |
"name": "PLACEHOLDER_R" | |
}, | |
{ | |
"name": "PLACEHOLDER_S" | |
}, | |
{ | |
"name": "PLACEHOLDER_T" | |
}, | |
{ | |
"name": "PLACEHOLDER_U" | |
}, | |
{ | |
"name": "PLACEHOLDER_V" | |
}, | |
{ | |
"name": "PLACEHOLDER_W" | |
}, | |
{ | |
"name": "PLACEHOLDER_X" | |
}, | |
{ | |
"name": "PLACEHOLDER_Y" | |
}, | |
{ | |
"name": "PLACEHOLDER_Z" | |
}, | |
{ | |
"name": "UNKNOWN" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Quarry", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "VANILLA" | |
}, | |
{ | |
"name": "SABER" | |
}, | |
{ | |
"name": "SUNNY" | |
}, | |
{ | |
"name": "UNKNOWN" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Raydium", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "ALEPHUSDC" | |
}, | |
{ | |
"name": "BOPRAY" | |
}, | |
{ | |
"name": "COPEUSDC" | |
}, | |
{ | |
"name": "LIKEUSDC" | |
}, | |
{ | |
"name": "PSYUSDC" | |
}, | |
{ | |
"name": "MERUSDC" | |
}, | |
{ | |
"name": "stSOLUSDC" | |
}, | |
{ | |
"name": "RAY" | |
}, | |
{ | |
"name": "RAYUSDT" | |
}, | |
{ | |
"name": "RAYUSDC" | |
}, | |
{ | |
"name": "RAYSRM" | |
}, | |
{ | |
"name": "RAYSOL" | |
}, | |
{ | |
"name": "RAYETH" | |
}, | |
{ | |
"name": "ROPEUSDC" | |
}, | |
{ | |
"name": "SAMORAY" | |
}, | |
{ | |
"name": "SNYUSDC" | |
}, | |
{ | |
"name": "stSOLUSDT" | |
}, | |
{ | |
"name": "TULIPUSDC" | |
}, | |
{ | |
"name": "ATLASRAY" | |
}, | |
{ | |
"name": "POLISRAY" | |
}, | |
{ | |
"name": "RAYwhETH" | |
}, | |
{ | |
"name": "PLACEHOLDER_B" | |
}, | |
{ | |
"name": "PLACEHOLDER_C" | |
}, | |
{ | |
"name": "PLACEHOLDER_D" | |
}, | |
{ | |
"name": "PLACEHOLDER_E" | |
}, | |
{ | |
"name": "PLACEHOLDER_F" | |
}, | |
{ | |
"name": "PLACEHOLDER_G" | |
}, | |
{ | |
"name": "PLACEHOLDER_H" | |
}, | |
{ | |
"name": "PLACEHOLDER_I" | |
}, | |
{ | |
"name": "PLACEHOLDER_J" | |
}, | |
{ | |
"name": "PLACEHOLDER_K" | |
}, | |
{ | |
"name": "PLACEHOLDER_L" | |
}, | |
{ | |
"name": "PLACEHOLDER_M" | |
}, | |
{ | |
"name": "PLACEHOLDER_N" | |
}, | |
{ | |
"name": "PLACEHOLDER_O" | |
}, | |
{ | |
"name": "PLACEHOLDER_P" | |
}, | |
{ | |
"name": "PLACEHOLDER_Q" | |
}, | |
{ | |
"name": "PLACEHOLDER_R" | |
}, | |
{ | |
"name": "PLACEHOLDER_S" | |
}, | |
{ | |
"name": "PLACEHOLDER_T" | |
}, | |
{ | |
"name": "PLACEHOLDER_U" | |
}, | |
{ | |
"name": "PLACEHOLDER_V" | |
}, | |
{ | |
"name": "PLACEHOLDER_W" | |
}, | |
{ | |
"name": "PLACEHOLDER_X" | |
}, | |
{ | |
"name": "PLACEHOLDER_Y" | |
}, | |
{ | |
"name": "PLACEHOLDER_Z" | |
}, | |
{ | |
"name": "UNKNOWN" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Unknown", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Uknown" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Farm", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Raydium", | |
"fields": [ | |
{ | |
"name": "name", | |
"type": { | |
"defined": "Raydium" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "Lending", | |
"fields": [ | |
{ | |
"name": "name", | |
"type": { | |
"defined": "Lending" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "Orca", | |
"fields": [ | |
{ | |
"name": "name", | |
"type": { | |
"defined": "Orca" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "Quarry", | |
"fields": [ | |
{ | |
"name": "name", | |
"type": { | |
"defined": "Quarry" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "Atrix", | |
"fields": [ | |
{ | |
"name": "name", | |
"type": { | |
"defined": "Atrix" | |
} | |
} | |
] | |
}, | |
{ | |
"name": "Unknown", | |
"fields": [ | |
{ | |
"name": "name", | |
"type": { | |
"defined": "Unknown" | |
} | |
} | |
] | |
} | |
] | |
} | |
}, | |
{ | |
"name": "SlippageMethod", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Ignore" | |
}, | |
{ | |
"name": "Percentage", | |
"fields": [ | |
{ | |
"name": "perc", | |
"type": "u64" | |
}, | |
{ | |
"name": "coin_amount_pre", | |
"type": "u64" | |
}, | |
{ | |
"name": "pc_amount_pre", | |
"type": "u64" | |
} | |
] | |
} | |
] | |
} | |
}, | |
{ | |
"name": "SettleMethod", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Exact" | |
}, | |
{ | |
"name": "Multiplier", | |
"fields": [ | |
{ | |
"name": "modif", | |
"type": "i64" | |
} | |
] | |
} | |
] | |
} | |
}, | |
{ | |
"name": "StrategyType", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "BorrowLend" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ProgramType", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "SplUnmodified" | |
}, | |
{ | |
"name": "SplModifiedSolend" | |
}, | |
{ | |
"name": "MangoV3" | |
}, | |
{ | |
"name": "Unknown" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "RebalanceStates", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Inactive" | |
}, | |
{ | |
"name": "Started" | |
}, | |
{ | |
"name": "VaultARemoved" | |
}, | |
{ | |
"name": "VaultABRebalanced" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "QuarryVariant", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Vanilla" | |
}, | |
{ | |
"name": "Saber" | |
}, | |
{ | |
"name": "Sunny" | |
}, | |
{ | |
"name": "UNKNOWN" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Roles", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "COMPOUNDER" | |
}, | |
{ | |
"name": "FEE" | |
}, | |
{ | |
"name": "ADMIN" | |
}, | |
{ | |
"name": "VAULT" | |
}, | |
{ | |
"name": "SWAP" | |
}, | |
{ | |
"name": "SWEEP" | |
}, | |
{ | |
"name": "UNKNOWN" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "AtrixAddLiquidityAction", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Ix1" | |
}, | |
{ | |
"name": "Deposit" | |
}, | |
{ | |
"name": "PlaceIx1" | |
}, | |
{ | |
"name": "PlaceIx2" | |
}, | |
{ | |
"name": "All" | |
}, | |
{ | |
"name": "UNKNOWN" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Side", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Bid" | |
}, | |
{ | |
"name": "Ask" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "ModifyWhiteListAction", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Add" | |
}, | |
{ | |
"name": "Remove" | |
}, | |
{ | |
"name": "Revoke" | |
}, | |
{ | |
"name": "Unknown" | |
} | |
] | |
} | |
} | |
], | |
"errors": [ | |
{ | |
"code": 6000, | |
"name": "Unauthorized", | |
"msg": "unauthorized account" | |
}, | |
{ | |
"code": 6001, | |
"name": "InsufficientWhitelistSpace", | |
"msg": "insufficient whitelist space" | |
} | |
] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"version": "0.1.0", | |
"name": "whirlpool", | |
"instructions": [ | |
{ | |
"name": "initializeConfig", | |
"accounts": [ | |
{ | |
"name": "config", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "funder", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "feeAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "collectProtocolFeesAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rewardEmissionsSuperAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "defaultProtocolFeeRate", | |
"type": "u16" | |
} | |
] | |
}, | |
{ | |
"name": "initializePool", | |
"accounts": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenMintA", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenMintB", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "funder", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultA", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "tokenVaultB", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "feeTier", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "bumps", | |
"type": { | |
"defined": "WhirlpoolBumps" | |
} | |
}, | |
{ | |
"name": "tickSpacing", | |
"type": "u16" | |
}, | |
{ | |
"name": "initialSqrtPrice", | |
"type": "u128" | |
} | |
] | |
}, | |
{ | |
"name": "initializeTickArray", | |
"accounts": [ | |
{ | |
"name": "whirlpool", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "funder", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "tickArray", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "startTickIndex", | |
"type": "i32" | |
} | |
] | |
}, | |
{ | |
"name": "initializeFeeTier", | |
"accounts": [ | |
{ | |
"name": "config", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeTier", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "funder", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "feeAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "tickSpacing", | |
"type": "u16" | |
}, | |
{ | |
"name": "defaultFeeRate", | |
"type": "u16" | |
} | |
] | |
}, | |
{ | |
"name": "initializeReward", | |
"accounts": [ | |
{ | |
"name": "rewardAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "funder", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardMint", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardVault", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "rewardIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "setRewardEmissions", | |
"accounts": [ | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "rewardVault", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "rewardIndex", | |
"type": "u8" | |
}, | |
{ | |
"name": "emissionsPerSecondX64", | |
"type": "u128" | |
} | |
] | |
}, | |
{ | |
"name": "openPosition", | |
"accounts": [ | |
{ | |
"name": "funder", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "owner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "position", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionMint", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "positionTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "whirlpool", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "associatedTokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "bumps", | |
"type": { | |
"defined": "OpenPositionBumps" | |
} | |
}, | |
{ | |
"name": "tickLowerIndex", | |
"type": "i32" | |
}, | |
{ | |
"name": "tickUpperIndex", | |
"type": "i32" | |
} | |
] | |
}, | |
{ | |
"name": "openPositionWithMetadata", | |
"accounts": [ | |
{ | |
"name": "funder", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "owner", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "position", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionMint", | |
"isMut": true, | |
"isSigner": true | |
}, | |
{ | |
"name": "positionMetadataAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "whirlpool", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "systemProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rent", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "associatedTokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "metadataProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "metadataUpdateAuth", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "bumps", | |
"type": { | |
"defined": "OpenPositionWithMetadataBumps" | |
} | |
}, | |
{ | |
"name": "tickLowerIndex", | |
"type": "i32" | |
}, | |
{ | |
"name": "tickUpperIndex", | |
"type": "i32" | |
} | |
] | |
}, | |
{ | |
"name": "increaseLiquidity", | |
"accounts": [ | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "position", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenOwnerAccountA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenOwnerAccountB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArrayLower", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArrayUpper", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "liquidityAmount", | |
"type": "u128" | |
}, | |
{ | |
"name": "tokenMaxA", | |
"type": "u64" | |
}, | |
{ | |
"name": "tokenMaxB", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "decreaseLiquidity", | |
"accounts": [ | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "position", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenOwnerAccountA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenOwnerAccountB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArrayLower", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArrayUpper", | |
"isMut": true, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "liquidityAmount", | |
"type": "u128" | |
}, | |
{ | |
"name": "tokenMinA", | |
"type": "u64" | |
}, | |
{ | |
"name": "tokenMinB", | |
"type": "u64" | |
} | |
] | |
}, | |
{ | |
"name": "updateFeesAndRewards", | |
"accounts": [ | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "position", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArrayLower", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArrayUpper", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "collectFees", | |
"accounts": [ | |
{ | |
"name": "whirlpool", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "position", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenOwnerAccountA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenOwnerAccountB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "collectReward", | |
"accounts": [ | |
{ | |
"name": "whirlpool", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "position", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionTokenAccount", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardOwnerAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardVault", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "rewardIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "collectProtocolFees", | |
"accounts": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "collectProtocolFeesAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "tokenVaultA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenDestinationA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenDestinationB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "swap", | |
"accounts": [ | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenOwnerAccountA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultA", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenOwnerAccountB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenVaultB", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArray0", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArray1", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tickArray2", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "oracle", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "amount", | |
"type": "u64" | |
}, | |
{ | |
"name": "otherAmountThreshold", | |
"type": "u64" | |
}, | |
{ | |
"name": "sqrtPriceLimit", | |
"type": "u128" | |
}, | |
{ | |
"name": "amountSpecifiedIsInput", | |
"type": "bool" | |
}, | |
{ | |
"name": "aToB", | |
"type": "bool" | |
} | |
] | |
}, | |
{ | |
"name": "closePosition", | |
"accounts": [ | |
{ | |
"name": "positionAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "receiver", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "position", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionMint", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "positionTokenAccount", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "tokenProgram", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "setDefaultFeeRate", | |
"accounts": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeTier", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeAuthority", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [ | |
{ | |
"name": "defaultFeeRate", | |
"type": "u16" | |
} | |
] | |
}, | |
{ | |
"name": "setDefaultProtocolFeeRate", | |
"accounts": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeAuthority", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [ | |
{ | |
"name": "defaultProtocolFeeRate", | |
"type": "u16" | |
} | |
] | |
}, | |
{ | |
"name": "setFeeRate", | |
"accounts": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeAuthority", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [ | |
{ | |
"name": "feeRate", | |
"type": "u16" | |
} | |
] | |
}, | |
{ | |
"name": "setProtocolFeeRate", | |
"accounts": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeAuthority", | |
"isMut": false, | |
"isSigner": true | |
} | |
], | |
"args": [ | |
{ | |
"name": "protocolFeeRate", | |
"type": "u16" | |
} | |
] | |
}, | |
{ | |
"name": "setFeeAuthority", | |
"accounts": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "feeAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "newFeeAuthority", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "setCollectProtocolFeesAuthority", | |
"accounts": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "collectProtocolFeesAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "newCollectProtocolFeesAuthority", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
}, | |
{ | |
"name": "setRewardAuthority", | |
"accounts": [ | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "newRewardAuthority", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "rewardIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "setRewardAuthorityBySuperAuthority", | |
"accounts": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"isMut": false, | |
"isSigner": false | |
}, | |
{ | |
"name": "whirlpool", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardEmissionsSuperAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "newRewardAuthority", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [ | |
{ | |
"name": "rewardIndex", | |
"type": "u8" | |
} | |
] | |
}, | |
{ | |
"name": "setRewardEmissionsSuperAuthority", | |
"accounts": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"isMut": true, | |
"isSigner": false | |
}, | |
{ | |
"name": "rewardEmissionsSuperAuthority", | |
"isMut": false, | |
"isSigner": true | |
}, | |
{ | |
"name": "newRewardEmissionsSuperAuthority", | |
"isMut": false, | |
"isSigner": false | |
} | |
], | |
"args": [] | |
} | |
], | |
"accounts": [ | |
{ | |
"name": "WhirlpoolsConfig", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "feeAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "collectProtocolFeesAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "rewardEmissionsSuperAuthority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "defaultProtocolFeeRate", | |
"type": "u16" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "FeeTier", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "tickSpacing", | |
"type": "u16" | |
}, | |
{ | |
"name": "defaultFeeRate", | |
"type": "u16" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Position", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "whirlpool", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "positionMint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "liquidity", | |
"type": "u128" | |
}, | |
{ | |
"name": "tickLowerIndex", | |
"type": "i32" | |
}, | |
{ | |
"name": "tickUpperIndex", | |
"type": "i32" | |
}, | |
{ | |
"name": "feeGrowthCheckpointA", | |
"type": "u128" | |
}, | |
{ | |
"name": "feeOwedA", | |
"type": "u64" | |
}, | |
{ | |
"name": "feeGrowthCheckpointB", | |
"type": "u128" | |
}, | |
{ | |
"name": "feeOwedB", | |
"type": "u64" | |
}, | |
{ | |
"name": "rewardInfos", | |
"type": { | |
"array": [ | |
{ | |
"defined": "PositionRewardInfo" | |
}, | |
3 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "TickArray", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "startTickIndex", | |
"type": "i32" | |
}, | |
{ | |
"name": "ticks", | |
"type": { | |
"array": [ | |
{ | |
"defined": "Tick" | |
}, | |
88 | |
] | |
} | |
}, | |
{ | |
"name": "whirlpool", | |
"type": "publicKey" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Whirlpool", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "whirlpoolsConfig", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "whirlpoolBump", | |
"type": { | |
"array": [ | |
"u8", | |
1 | |
] | |
} | |
}, | |
{ | |
"name": "tickSpacing", | |
"type": "u16" | |
}, | |
{ | |
"name": "tickSpacingSeed", | |
"type": { | |
"array": [ | |
"u8", | |
2 | |
] | |
} | |
}, | |
{ | |
"name": "feeRate", | |
"type": "u16" | |
}, | |
{ | |
"name": "protocolFeeRate", | |
"type": "u16" | |
}, | |
{ | |
"name": "liquidity", | |
"type": "u128" | |
}, | |
{ | |
"name": "sqrtPrice", | |
"type": "u128" | |
}, | |
{ | |
"name": "tickCurrentIndex", | |
"type": "i32" | |
}, | |
{ | |
"name": "protocolFeeOwedA", | |
"type": "u64" | |
}, | |
{ | |
"name": "protocolFeeOwedB", | |
"type": "u64" | |
}, | |
{ | |
"name": "tokenMintA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "tokenVaultA", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "feeGrowthGlobalA", | |
"type": "u128" | |
}, | |
{ | |
"name": "tokenMintB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "tokenVaultB", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "feeGrowthGlobalB", | |
"type": "u128" | |
}, | |
{ | |
"name": "rewardLastUpdatedTimestamp", | |
"type": "u64" | |
}, | |
{ | |
"name": "rewardInfos", | |
"type": { | |
"array": [ | |
{ | |
"defined": "WhirlpoolRewardInfo" | |
}, | |
3 | |
] | |
} | |
} | |
] | |
} | |
} | |
], | |
"types": [ | |
{ | |
"name": "OpenPositionBumps", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "positionBump", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "OpenPositionWithMetadataBumps", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "positionBump", | |
"type": "u8" | |
}, | |
{ | |
"name": "metadataBump", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "PositionRewardInfo", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "growthInsideCheckpoint", | |
"type": "u128" | |
}, | |
{ | |
"name": "amountOwed", | |
"type": "u64" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Tick", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "initialized", | |
"type": "bool" | |
}, | |
{ | |
"name": "liquidityNet", | |
"type": "i128" | |
}, | |
{ | |
"name": "liquidityGross", | |
"type": "u128" | |
}, | |
{ | |
"name": "feeGrowthOutsideA", | |
"type": "u128" | |
}, | |
{ | |
"name": "feeGrowthOutsideB", | |
"type": "u128" | |
}, | |
{ | |
"name": "rewardGrowthsOutside", | |
"type": { | |
"array": [ | |
"u128", | |
3 | |
] | |
} | |
} | |
] | |
} | |
}, | |
{ | |
"name": "WhirlpoolRewardInfo", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "mint", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "vault", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "authority", | |
"type": "publicKey" | |
}, | |
{ | |
"name": "emissionsPerSecondX64", | |
"type": "u128" | |
}, | |
{ | |
"name": "growthGlobalX64", | |
"type": "u128" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "WhirlpoolBumps", | |
"type": { | |
"kind": "struct", | |
"fields": [ | |
{ | |
"name": "whirlpoolBump", | |
"type": "u8" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "CurrIndex", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Below" | |
}, | |
{ | |
"name": "Inside" | |
}, | |
{ | |
"name": "Above" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "TickLabel", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Upper" | |
}, | |
{ | |
"name": "Lower" | |
} | |
] | |
} | |
}, | |
{ | |
"name": "Direction", | |
"type": { | |
"kind": "enum", | |
"variants": [ | |
{ | |
"name": "Left" | |
}, | |
{ | |
"name": "Right" | |
} | |
] | |
} | |
} | |
], | |
"errors": [ | |
{ | |
"code": 6000, | |
"name": "InvalidEnum", | |
"msg": "Enum value could not be converted" | |
}, | |
{ | |
"code": 6001, | |
"name": "InvalidStartTick", | |
"msg": "Invalid start tick index provided." | |
}, | |
{ | |
"code": 6002, | |
"name": "TickArrayExistInPool", | |
"msg": "Tick-array already exists in this whirlpool" | |
}, | |
{ | |
"code": 6003, | |
"name": "TickArrayIndexOutofBounds", | |
"msg": "Attempt to search for a tick-array failed" | |
}, | |
{ | |
"code": 6004, | |
"name": "InvalidTickSpacing", | |
"msg": "Tick-spacing is not supported" | |
}, | |
{ | |
"code": 6005, | |
"name": "ClosePositionNotEmpty", | |
"msg": "Position is not empty It cannot be closed" | |
}, | |
{ | |
"code": 6006, | |
"name": "DivideByZero", | |
"msg": "Unable to divide by zero" | |
}, | |
{ | |
"code": 6007, | |
"name": "NumberCastError", | |
"msg": "Unable to cast number into BigInt" | |
}, | |
{ | |
"code": 6008, | |
"name": "NumberDownCastError", | |
"msg": "Unable to down cast number" | |
}, | |
{ | |
"code": 6009, | |
"name": "TickNotFound", | |
"msg": "Tick not found within tick array" | |
}, | |
{ | |
"code": 6010, | |
"name": "InvalidTickIndex", | |
"msg": "Provided tick index is either out of bounds or uninitializable" | |
}, | |
{ | |
"code": 6011, | |
"name": "SqrtPriceOutOfBounds", | |
"msg": "Provided sqrt price out of bounds" | |
}, | |
{ | |
"code": 6012, | |
"name": "LiquidityZero", | |
"msg": "Liquidity amount must be greater than zero" | |
}, | |
{ | |
"code": 6013, | |
"name": "LiquidityTooHigh", | |
"msg": "Liquidity amount must be less than i64::MAX" | |
}, | |
{ | |
"code": 6014, | |
"name": "LiquidityOverflow", | |
"msg": "Liquidity overflow" | |
}, | |
{ | |
"code": 6015, | |
"name": "LiquidityUnderflow", | |
"msg": "Liquidity underflow" | |
}, | |
{ | |
"code": 6016, | |
"name": "LiquidityNetError", | |
"msg": "Tick liquidity net underflowed or overflowed" | |
}, | |
{ | |
"code": 6017, | |
"name": "TokenMaxExceeded", | |
"msg": "Exceeded token max" | |
}, | |
{ | |
"code": 6018, | |
"name": "TokenMinSubceeded", | |
"msg": "Did not meet token min" | |
}, | |
{ | |
"code": 6019, | |
"name": "MissingOrInvalidDelegate", | |
"msg": "Position token account has a missing or invalid delegate" | |
}, | |
{ | |
"code": 6020, | |
"name": "InvalidPositionTokenAmount", | |
"msg": "Position token amount must be 1" | |
}, | |
{ | |
"code": 6021, | |
"name": "InvalidTimestampConversion", | |
"msg": "Timestamp should be convertible from i64 to u64" | |
}, | |
{ | |
"code": 6022, | |
"name": "InvalidTimestamp", | |
"msg": "Timestamp should be greater than the last updated timestamp" | |
}, | |
{ | |
"code": 6023, | |
"name": "InvalidTickArraySequence", | |
"msg": "Invalid tick array sequence provided for instruction." | |
}, | |
{ | |
"code": 6024, | |
"name": "InvalidTokenMintOrder", | |
"msg": "Token Mint in wrong order" | |
}, | |
{ | |
"code": 6025, | |
"name": "RewardNotInitialized", | |
"msg": "Reward not initialized" | |
}, | |
{ | |
"code": 6026, | |
"name": "InvalidRewardIndex", | |
"msg": "Invalid reward index" | |
}, | |
{ | |
"code": 6027, | |
"name": "RewardVaultAmountInsufficient", | |
"msg": "Reward vault requires amount to support emissions for at least one day" | |
}, | |
{ | |
"code": 6028, | |
"name": "FeeRateMaxExceeded", | |
"msg": "Exceeded max fee rate" | |
}, | |
{ | |
"code": 6029, | |
"name": "ProtocolFeeRateMaxExceeded", | |
"msg": "Exceeded max protocol fee rate" | |
}, | |
{ | |
"code": 6030, | |
"name": "MultiplicationShiftRightOverflow", | |
"msg": "Multiplication with shift right overflow" | |
}, | |
{ | |
"code": 6031, | |
"name": "MulDivOverflow", | |
"msg": "Muldiv overflow" | |
}, | |
{ | |
"code": 6032, | |
"name": "MulDivInvalidInput", | |
"msg": "Invalid div_u256 input" | |
}, | |
{ | |
"code": 6033, | |
"name": "MultiplicationOverflow", | |
"msg": "Multiplication overflow" | |
}, | |
{ | |
"code": 6034, | |
"name": "InvalidSqrtPriceLimitDirection", | |
"msg": "Provided SqrtPriceLimit not in the same direction as the swap." | |
}, | |
{ | |
"code": 6035, | |
"name": "ZeroTradableAmount", | |
"msg": "There are no tradable amount to swap." | |
}, | |
{ | |
"code": 6036, | |
"name": "AmountOutBelowMinimum", | |
"msg": "Amount out below minimum threshold" | |
}, | |
{ | |
"code": 6037, | |
"name": "AmountInAboveMaximum", | |
"msg": "Amount in above maximum threshold" | |
}, | |
{ | |
"code": 6038, | |
"name": "TickArraySequenceInvalidIndex", | |
"msg": "Invalid index for tick array sequence" | |
}, | |
{ | |
"code": 6039, | |
"name": "AmountCalcOverflow", | |
"msg": "Amount calculated overflows" | |
}, | |
{ | |
"code": 6040, | |
"name": "AmountRemainingOverflow", | |
"msg": "Amount remaining overflows" | |
} | |
] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import fileinput | |
import re | |
import os | |
import pandas as pd | |
import solana.rpc.api | |
import time | |
RE_SOL_ADDRESS = re.compile(r'[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{32,44}') | |
OWNER_TO_TYPE = { | |
'NativeLoader1111111111111111111111111111111': 'builtin', | |
'Stake11111111111111111111111111111111111111': 'stake', | |
} | |
def input_y_n(prompt): | |
answer = input(prompt + " [y/n] ") | |
return answer.strip().lower() == 'y' | |
def main(): | |
sol = solana.rpc.api.Client("https://api.mainnet-beta.solana.com") | |
accounts = pd.read_csv("accounts.csv") | |
known_keys = set(accounts["pubkey"]) | |
new = { | |
'pubkey': [], | |
'type': [], | |
'description': [], | |
'own': [], | |
} | |
try: | |
for line in fileinput.input(): | |
for match in RE_SOL_ADDRESS.finditer(line): | |
sol_address = match.group(0) | |
if sol_address in known_keys: | |
continue | |
print(sol_address, line.strip()) | |
sol_acc = sol.get_account_info(sol_address)['result'] | |
typ = None | |
if sol_acc['value'] is not None: | |
time.sleep(0.3) | |
continue | |
print(dict(sol_acc['value'], data="...")) | |
typ = OWNER_TO_TYPE.get(sol_acc['value']['owner']) | |
if sol_acc['value']['executable']: | |
typ = 'program' | |
desc = input("description? ").strip() | |
if not desc: | |
continue | |
if typ is None: | |
typ = input("type? ").strip() | |
own = typ not in {"builtin"} and input_y_n("own?") | |
new['pubkey'].append(sol_address) | |
new['type'].append(typ) | |
new['description'].append(desc) | |
new['own'].append(own) | |
finally: | |
new['own'] = pd.Series(new['own'], dtype=bool) | |
accounts = pd.concat([accounts, pd.DataFrame(new)]) | |
os.rename("accounts.csv", ".accounts.csv.bak") | |
accounts.to_csv("accounts.csv", index=False) | |
if __name__ == '__main__': | |
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import solana.publickey | |
import constants | |
import struct | |
import json | |
import os | |
from anchorpy_idl import Idl, InstructionCoder | |
def parse_spl_token(account_keys, accounts, data): | |
tag = data[0] | |
if tag == 0 or tag == 20: | |
decimals = data[1] | |
mint_authority = solana.publickey.PublicKey(data[2:34]) | |
freeze_authority = solana.publickey.PublicKey(data[35:67]) if data[34] != 0 else None | |
return { | |
'instruction': 'InitializeMint', | |
'decimals': decimals, | |
'mint_authority': mint_authority, | |
'freeze_authority': freeze_authority, | |
'mint': account_keys[accounts[0]], | |
} | |
if tag == 1 or tag == 16 or tag == 18: | |
return { | |
'instruction': 'InitializeAccount', | |
'account': account_keys[accounts[0]], | |
'mint': account_keys[accounts[1]], | |
'owner': account_keys[accounts[2]] if tag == 1 else solana.publickey.PublicKey(data[1:]), | |
} | |
if tag == 2 or tag == 19: | |
first_signer_index = 2 if tag == 2 else 1 | |
return { | |
'instruction': 'InitializeMultisig', | |
'multisig': account_keys[accounts[0]], | |
'm': data[1], | |
'signers': [account_keys[i] for i in accounts[first_signer_index:]] | |
} | |
if tag == 7 or tag == 14: | |
amount = struct.unpack("<Q", data[1:9])[0] | |
return { | |
'instruction': 'MintTo', | |
'amount': amount, | |
'mint': account_keys[accounts[0]], | |
'account': account_keys[accounts[1]], | |
'authority': account_keys[accounts[2]], | |
'decimals': None if tag == 7 else data[9], | |
} | |
if tag == 8 or tag == 15: | |
amount = struct.unpack("<Q", data[1:9])[0] | |
return { | |
'instruction': 'Burn', | |
'amount': amount, | |
'account': account_keys[accounts[0]], | |
'mint': account_keys[accounts[1]], | |
'authority': account_keys[accounts[2]], | |
'decimals': None if tag == 8 else data[9], | |
} | |
if tag == 3 or tag == 12: | |
amount = struct.unpack("<Q", data[1:9])[0] | |
mint_offset = 1 if tag != 3 else 0 | |
return { | |
'instruction': 'Transfer', | |
'amount': amount, | |
'source': account_keys[accounts[0]], | |
'mint': account_keys[accounts[1]] if tag != 3 else None, | |
'destination': account_keys[accounts[mint_offset + 1]], | |
'authority': account_keys[accounts[mint_offset + 2]], | |
'decimals': None if tag == 3 else data[9], | |
} | |
if tag == 4 or tag == 13: | |
amount = struct.unpack("<Q", data[1:9])[0] | |
mint_offset = 1 if tag != 4 else 0 | |
return { | |
'instruction': 'Approve', | |
'amount': amount, | |
'source': account_keys[accounts[0]], | |
'mint': account_keys[accounts[1]] if tag != 4 else None, | |
'delegate': account_keys[accounts[mint_offset + 1]], | |
'authority': account_keys[accounts[mint_offset + 2]], | |
'decimals': None if tag == 4 else data[9], | |
} | |
if tag == 5: | |
return { | |
'instruction': 'Revoke', | |
'source': account_keys[accounts[0]], | |
'authority': account_keys[accounts[1]], | |
} | |
if tag == 6: | |
authority_type = ['MintTokens', 'FreezeAccount', 'AccountOwner', 'CloseAccount'][data[1]] | |
new_authority = solana.publickey.PublicKey(data[3:35]) if data[2] != 0 else None | |
return { | |
'instruction': 'SetAuthority', | |
'authority_type': authority_type, | |
'new_authority': new_authority, | |
'account': account_keys[accounts[0]], | |
'authority': account_keys[accounts[1]], | |
} | |
if tag == 9: | |
return { | |
'instruction': 'CloseAccount', | |
'account': account_keys[accounts[0]], | |
'destination': account_keys[accounts[1]], | |
'authority': account_keys[accounts[2]], | |
} | |
if tag == 10: | |
return { | |
'instruction': 'FreezeAccount', | |
'account': account_keys[accounts[0]], | |
'mint': account_keys[accounts[1]], | |
'authority': account_keys[accounts[2]], | |
} | |
if tag == 11: | |
return { | |
'instruction': 'ThawAccount', | |
'account': account_keys[accounts[0]], | |
'mint': account_keys[accounts[1]], | |
'authority': account_keys[accounts[2]], | |
} | |
if tag == 17: | |
return { | |
'instruction': 'SyncNative', | |
'account': account_keys[accounts[0]], | |
} | |
if tag == 21: | |
return { | |
'instruction': 'GetAccountDataSize', | |
'mint': account_keys[accounts[0]], | |
} | |
if tag == 23: | |
amount = struct.unpack("<Q", data[1:9])[0] | |
return { | |
'instruction': 'AmountToUiAmount', | |
'mint': account_keys[accounts[0]], | |
'amount': amount, | |
} | |
if tag == 24: | |
ui_amount = data[1:].decode() | |
return { | |
'instruction': 'UiAmountToAmount', | |
'mint': account_keys[accounts[0]], | |
'ui_amount': ui_amount, | |
} | |
def parse_stake(account_keys, accounts, data): | |
tag = struct.unpack("<I", data[0:4])[0] | |
def parse_authorized(data): | |
return { | |
'staker': solana.publickey.PublicKey(data[:32]), | |
'withdrawer': solana.publickey.PublicKey(data[32:64]) | |
} | |
def parse_lockup(data, custodian=None): | |
timestamp = struct.unpack("<q", data[:8])[0] | |
epoch = struct.unpack("<Q", data[8:16])[0] | |
custodian = solana.publickey.PublicKey(data[16:48]) if custodian is None and len(data) == 48 else custodian | |
if custodian and str(custodian) == constants.SYSTEM_PROGRAM_ID: | |
custodian = None | |
return { | |
'unix_timestamp': timestamp if timestamp != 0 else None, | |
'epoch': epoch if epoch != 0 else None, | |
'custodian': custodian, | |
} | |
def parse_lockup_args(data, custodian=None): | |
timestamp = None | |
epoch = None | |
if data[0]: | |
timestamp = struct.unpack("<q", data[1:9])[0] | |
data = data[9:] | |
else: | |
data = data[1:] | |
if data[0]: | |
epoch = struct.unpack("<Q", data[1:9])[0] | |
data = data[9:] | |
else: | |
data = data[1:] | |
if data and data[0] and not custodian: | |
custodian = solana.publickey.PublicKey(data[1:]) | |
return { | |
'unix_timestamp': timestamp, | |
'epoch': epoch, | |
'custodian': custodian, | |
} | |
if tag == 0: | |
return { | |
'instruction': 'Initialize', | |
'account': account_keys[accounts[0]], | |
'authorized': parse_authorized(data[4:68]), | |
'lockup': parse_lockup(data[68:]) | |
} | |
if tag == 9: | |
return { | |
'instruction': 'Initialize', | |
'account': account_keys[accounts[0]], | |
'authorized': { | |
'staker': account_keys[accounts[3]], | |
'withdrawer': account_keys[accounts[3]], | |
}, | |
'lockup': { | |
'unix_timestamp': None, | |
'epoch': None, | |
'custodian': None, | |
} | |
} | |
if tag == 1 : | |
new_authority = solana.publickey.PublicKey(data[4:36]) | |
kind = ['Staker', 'Withdrawer'][struct.unpack('<I', data[36:40])[0]] | |
return { | |
'instruction': 'Authorize', | |
'kind': kind, | |
'new_authority': new_authority, | |
'account': account_keys[accounts[0]], | |
'authority': account_keys[accounts[2]], | |
'custodian': account_keys[accounts[3]] if len(accounts) == 4 else None, | |
} | |
if tag == 10: | |
kind = ['Staker', 'Withdrawer'][struct.unpack('<I', data[4:8])[0]] | |
return { | |
'instruction': 'Authorize', | |
'kind': kind, | |
'account': account_keys[accounts[0]], | |
'authority': account_keys[accounts[2]], | |
'new_authority': account_keys[accounts[3]], | |
'custodian': account_keys[accounts[4]] if len(accounts) == 5 else None, | |
} | |
if tag == 2: | |
return { | |
'instruction': 'DelegateStake', | |
'account': account_keys[accounts[0]], | |
'vote': account_keys[accounts[1]], | |
'authority': account_keys[accounts[5]], | |
} | |
if tag == 3: | |
amount = struct.unpack("<Q", data[4:12])[0] | |
return { | |
'instruction': 'Split', | |
'amount': amount, | |
'source': account_keys[accounts[0]], | |
'destination': account_keys[accounts[1]], | |
'authority': account_keys[accounts[2]], | |
} | |
if tag == 4: | |
amount = struct.unpack("<Q", data[4:12])[0] | |
return { | |
'instruction': 'Withdraw', | |
'amount': amount, | |
'account': account_keys[accounts[0]], | |
'destination': account_keys[accounts[1]], | |
'authority': account_keys[accounts[4]], | |
'custodian': account_keys[accounts[5]] if len(accounts) == 6 else None, | |
} | |
if tag == 5: | |
return { | |
'instruction': 'Deactivate', | |
'account': account_keys[accounts[0]], | |
'authority': account_keys[accounts[2]], | |
} | |
if tag == 6: | |
return { | |
'instruction': 'SetLockup', | |
'account': account_keys[accounts[0]], | |
'signer': account_keys[accounts[1]], | |
'lockup': parse_lockup_args(data[4:]), | |
} | |
if tag == 12: | |
return { | |
'instruction': 'SetLockup', | |
'account': account_keys[accounts[0]], | |
'signer': account_keys[accounts[1]], | |
'lockup': parse_lockup_args(data[4:], custodian=account_keys[accounts[2]] if len(accounts) == 3 else None), | |
} | |
if tag == 7: | |
return { | |
'instruction': 'Merge', | |
'destination': account_keys[accounts[0]], | |
'source': account_keys[accounts[1]], | |
'authority': account_keys[accounts[4]], | |
} | |
if tag == 8: | |
return { | |
'instruction': 'AuthorizeWithSeed', | |
} | |
if tag == 11: | |
return { | |
'instruction': 'AuthorizeWithSeed', | |
} | |
if tag == 13: | |
return { | |
'instruction': 'GetMinimumDelegation', | |
} | |
if tag == 14: | |
return { | |
'instruction': 'DeactivateDelinquent', | |
'account': account_keys[accounts[0]], | |
'vote': account_keys[accounts[2]], | |
} | |
def parse_system(account_keys, accounts, data): | |
tag = struct.unpack("<I", data[0:4])[0] | |
if tag == 0: | |
amount = struct.unpack("<Q", data[4:12])[0] | |
space = struct.unpack("<Q", data[12:20])[0] | |
owner = solana.publickey.PublicKey(data[20:]) | |
return { | |
'instruction': 'CreateAccount', | |
'amount': amount, | |
'space': space, | |
'owner': owner, | |
'source': account_keys[accounts[0]], | |
'destination': account_keys[accounts[1]], | |
} | |
if tag == 1: | |
owner = solana.publickey.PublicKey(data[4:]) | |
return { | |
'instruction': 'Assign', | |
'owner': owner, | |
'account': account_keys[accounts[0]], | |
} | |
if tag == 2: | |
amount = struct.unpack("<Q", data[4:12])[0] | |
return { | |
'instruction': 'Transfer', | |
'amount': amount, | |
'source': account_keys[accounts[0]], | |
'destination': account_keys[accounts[1]], | |
} | |
if tag == 3: | |
return { | |
'instruction': 'CreateAccountWithSeed', | |
} | |
if tag == 4: | |
return { | |
'instruction': 'AdvanceNonceAccount', | |
'account': account_keys[accounts[0]], | |
'authority': account_keys[accounts[2]], | |
} | |
if tag == 5: | |
amount = struct.unpack("<Q", data[4:12])[0] | |
return { | |
'instruction': 'WithdrawNonceAccount', | |
'amount': amount, | |
'account': account_keys[accounts[0]], | |
'destination': account_keys[accounts[1]], | |
'authority': account_keys[accounts[4]], | |
} | |
if tag == 6: | |
authority = solana.publickey.PublicKey(data[4:]) | |
return { | |
'instruction': 'InitializeNonceAccount', | |
'account': account_keys[accounts[0]], | |
'authority': authority, | |
} | |
if tag == 7: | |
new_authority = solana.publickey.PublicKey(data[4:]) | |
return { | |
'instruction': 'AuthorizeNonceAccount', | |
'account': account_keys[accounts[0]], | |
'authority': account_keys[accounts[1]], | |
'new_authority': new_authority, | |
} | |
if tag == 8: | |
space = struct.unpack("<Q", data[4:12])[0] | |
return { | |
'instruction': 'Allocate', | |
'space': space, | |
'account': account_keys[accounts[0]], | |
} | |
if tag == 9: | |
return { | |
'instruction': 'AllocateWithSeed', | |
'account': account_keys[accounts[0]], | |
} | |
if tag == 10: | |
return { | |
'instruction': 'AssignWithSeed', | |
'account': account_keys[accounts[0]], | |
} | |
if tag == 11: | |
return { | |
'instruction': 'TransferWithSeed', | |
'source': account_keys[accounts[0]], | |
'destination': account_keys[accounts[2]], | |
} | |
if tag == 12: | |
return { | |
'instruction': 'UpgradeNonceAccount', | |
'account': account_keys[accounts[0]], | |
} | |
def parse_vote(account_keys, accounts, data): | |
tag = struct.unpack("<I", data[0:4])[0] | |
if tag == 3: | |
amount = struct.unpack("<Q", data[4:12])[0] | |
return { | |
'instruction': 'Withdraw', | |
'amount': amount, | |
'account': account_keys[accounts[0]], | |
'destination': account_keys[accounts[1]], | |
'authority': account_keys[accounts[2]], | |
} | |
raise NotImplementedError() | |
def parse_spl_ata(account_keys, accounts, data): | |
tag = 0 if not data else struct.unpack("<I", data[0:4])[0] | |
if tag == 0 or tag == 1: | |
return { | |
'instruction': 'Create', | |
'source': account_keys[accounts[0]], | |
'account': account_keys[accounts[1]], | |
'wallet': account_keys[accounts[2]], | |
'mint': account_keys[accounts[3]], | |
'idempotent': tag == 1 | |
} | |
if tag == 2: | |
return { | |
'instruction': 'RecoverNested', | |
'nested_account': account_keys[accounts[0]], | |
'nested_mint': account_keys[accounts[1]], | |
'wallet_ata': account_keys[accounts[2]], | |
'owner_ata': account_keys[accounts[3]], | |
'owner_mint': account_keys[accounts[4]], | |
'wallet': account_keys[accounts[5]], | |
} | |
raise RuntimeError('unparsable ATA instruction') | |
def parse_loader(account_keys, accounts, data): | |
tag = struct.unpack("<I", data[0:4])[0] | |
if tag == 0: | |
offset = struct.unpack("<I", data[4:8])[0] | |
return { | |
'instruction': 'Write', | |
'account': account_keys[accounts[0]], | |
'offset': offset, | |
} | |
if tag == 1: | |
return { | |
'instruction': 'Finalize', | |
'account': account_keys[accounts[0]], | |
} | |
raise RuntimeError('unparsable loader instruction') | |
def parse_upgradeable_loader(account_keys, accounts, data): | |
tag = struct.unpack("<I", data[0:4])[0] | |
if tag == 0: | |
return { | |
'instruction': 'InitializeBuffer', | |
'account': account_keys[accounts[0]], | |
'authority': account_keys[accounts[1]], | |
} | |
if tag == 1: | |
offset = struct.unpack("<I", data[4:8])[0] | |
return { | |
'instruction': 'Write', | |
'account': account_keys[accounts[0]], | |
'authority': account_keys[accounts[1]], | |
'offset': offset, | |
} | |
if tag == 2: | |
max_data_len = struct.unpack("<Q", data[4:12])[0] | |
return { | |
'instruction': 'DeployWithMaxDataLen', | |
'payer': account_keys[accounts[0]], | |
'programdata': account_keys[accounts[1]], | |
'program': account_keys[accounts[2]], | |
'buffer': account_keys[accounts[3]], | |
'authority': account_keys[accounts[7]], | |
'max_data_len': max_data_len, | |
} | |
if tag == 3: | |
return { | |
'instruction': 'Upgrade', | |
'programdata': account_keys[accounts[0]], | |
'program': account_keys[accounts[1]], | |
'buffer': account_keys[accounts[2]], | |
'spill': account_keys[accounts[3]], | |
'authority': account_keys[accounts[6]], | |
} | |
if tag == 4: | |
return { | |
'instruction': 'SetAuthority', | |
'account': account_keys[accounts[0]], | |
'authority': account_keys[accounts[1]], | |
'new_authority': account_keys[accounts[2]] if len(accounts) == 3 else None, | |
} | |
if tag == 5: | |
return { | |
'instruction': 'Close', | |
'account': account_keys[accounts[0]], | |
'destination': account_keys[accounts[1]], | |
'authority': account_keys[accounts[2]], | |
'program': account_keys[accounts[3]] if len(accounts) == 4 else None, | |
} | |
raise RuntimeError('unparsable upgradeable loader instruction') | |
class AnchorIxParser(): | |
def __init__(self, idl_path): | |
with open(idl_path) as f: | |
self.idl = Idl.from_json(json.load(f)) | |
self.coder = InstructionCoder(self.idl) | |
self.ix_by_name = {} | |
for ix in self.idl.instructions: | |
if ix.name in self.ix_by_name: | |
raise RuntimeError('instruction defined more than once in idl: ' + ix.name) | |
self.ix_by_name[ix.name] = ix | |
def __call__(self, account_keys, accounts, data) -> dict: | |
parsed = self.coder.parse(data) | |
out = dict(parsed['data']) | |
if '_io' in out: | |
out.pop('_io') | |
out['instruction'] = parsed['name'] | |
ix = self.ix_by_name[parsed['name']] | |
for acc, acc_idx in zip(ix.accounts, accounts): | |
out[acc.name] = account_keys[acc_idx] | |
return out | |
parse_jup = AnchorIxParser(os.path.dirname(__file__) + '/idl-jup.json') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import io | |
import json | |
import re | |
import time | |
import pandas as pd | |
import ratelimit | |
import requests | |
from tqdm import tqdm | |
import solana.publickey | |
def slot_to_epoch(slot): | |
return slot // 432000 | |
def first_epoch_slot(epoch): | |
return epoch * 432000 | |
class SolRpc: | |
def __init__(self, url, calls=3, period=1): | |
self.url = url | |
rater = ratelimit.limits(calls=calls, period=period) | |
self._request_ratelimited = ratelimit.sleep_and_retry(rater(self._request)) | |
def _request(self, method, *args): | |
req = { | |
"jsonrpc": "2.0", | |
"id": "1", | |
"method": method, | |
"params": list(args), | |
} | |
res = requests.post(self.url, json=req).json() | |
if "error" in res: | |
raise RuntimeError( | |
"Solana RPC request failed with response " | |
+ repr(res) | |
+ ". Request: " | |
+ repr(req) | |
) | |
return res["result"] | |
def __call__(self, *args, **kwargs): | |
return self._request_ratelimited(*args, **kwargs) | |
def rewards(self, pubkeys, epoch=None): | |
opts = {"epoch": epoch} if epoch is not None else {} | |
return self("getInflationReward", pubkeys, opts) | |
def blockTime(self, block): | |
return self("getBlockTime", block) | |
def epochInfo(self): | |
return self("getEpochInfo") | |
def epochTime(self, epoch): | |
first_block = self('getBlocksWithLimit', first_epoch_slot(epoch), 1)[0] | |
return get_block_time(self, first_block) | |
SCHEMA = { | |
"pubkey": str, | |
"epoch": int, | |
"timestamp": "datetime64[ns, UTC]", | |
"effective_slot": 'Int64', | |
"amount": int, | |
"post_balance": 'Int64', | |
"commission": 'Int64', | |
} | |
BLOCK_TIME_CACHE = {} | |
def get_block_time(rpc: SolRpc, slot): | |
if slot not in BLOCK_TIME_CACHE: | |
BLOCK_TIME_CACHE[slot] = rpc.blockTime(slot) | |
return BLOCK_TIME_CACHE[slot] | |
def fetch_rewards_for_epoch(rpc, fname, rewards: pd.DataFrame, epoch, all_pubkeys): | |
known_pks = set(rewards.loc[epoch].index) if epoch in set(rewards['epoch']) else set() | |
pubkeys = list(set(all_pubkeys) - known_pks) | |
if pubkeys: | |
result = rpc.rewards(pubkeys, epoch=epoch) | |
new_records = [] | |
for pk, reward in zip(pubkeys, result): | |
new_records.append( | |
{ | |
"pubkey": pk, | |
"epoch": epoch, | |
"timestamp": pd.to_datetime(get_block_time(rpc, reward["effectiveSlot"]), unit='s', utc=True) | |
if reward | |
else None, | |
"effective_slot": reward["effectiveSlot"] if reward else None, | |
"amount": reward["amount"] if reward else 0, | |
"post_balance": reward["postBalance"] if reward else None, | |
"commission": reward["commission"] if reward else None, | |
} | |
) | |
rewards = pd.concat( | |
[rewards, pd.DataFrame(new_records).astype(SCHEMA).set_index(["epoch", "pubkey"], drop=False)] # type: ignore | |
) | |
rewards.sort_index(inplace=True) | |
rewards.to_csv(fname, index=False) | |
epoch_time = rewards.loc[epoch].timestamp.min() | |
pks_with_timestamp = set(rewards.loc[epoch].timestamp.dropna().index) | |
if pd.isna(epoch_time) and all_pubkeys: | |
epoch_time = pd.to_datetime(rpc.epochTime(epoch + 1), unit='s', utc=True) | |
if epoch_time is None: | |
epoch_time = pd.to_datetime(0, unit='s', utc=True) | |
if set(all_pubkeys) - pks_with_timestamp: | |
records = pd.Series({ (epoch, pk): epoch_time for pk in all_pubkeys }) | |
rewards = rewards.assign(timestamp=rewards.timestamp.fillna(records)) | |
rewards.to_csv(fname, index=False) | |
return rewards | |
def load_rewards(filename) -> pd.DataFrame: | |
rewards: pd.DataFrame | |
try: | |
cols = dict(SCHEMA) | |
cols.pop('timestamp') | |
rewards = pd.read_csv(filename, parse_dates=['timestamp'], dtype=cols).astype(SCHEMA) # type: ignore | |
except FileNotFoundError: | |
rewards = pd.read_csv(io.StringIO(""), names=list(SCHEMA), dtype=SCHEMA) # type: ignore | |
rewards.set_index(["epoch", "pubkey"], inplace=True, drop=False) | |
rewards.sort_index(inplace=True) | |
# populate block time cache | |
for _, record in rewards[~rewards["effective_slot"].isna()].iterrows(): | |
BLOCK_TIME_CACHE[record["effective_slot"]] = record["timestamp"] | |
return rewards | |
def fetch_staking_rewards(rpc, all_pubkeys, filename): | |
rewards = load_rewards(filename) | |
cur_epoch = rpc.epochInfo()["epoch"] | |
new_records = [] | |
last_checkpoint = time.time() | |
for epoch in tqdm(range(cur_epoch), desc="Fetching inflation rewards"): | |
pubkeys = [pk for pk in all_pubkeys if (pk, epoch) not in rewards.index] | |
if not pubkeys: | |
continue | |
result = rpc.rewards(pubkeys, epoch=epoch) | |
for pk, reward in zip(pubkeys, result): | |
new_records.append( | |
{ | |
"pubkey": pk, | |
"epoch": epoch, | |
"timestamp": pd.to_datetime(get_block_time(rpc, reward["effectiveSlot"]), unit='s', utc=True) | |
if reward | |
else None, | |
"effective_slot": reward["effectiveSlot"] if reward else None, | |
"amount": reward["amount"] if reward else 0, | |
"post_balance": reward["postBalance"] if reward else None, | |
"commission": reward["commission"] if reward else None, | |
} | |
) | |
if time.time() - last_checkpoint > 2 or epoch == cur_epoch - 1: | |
last_checkpoint = time.time() | |
rewards = pd.concat( | |
[rewards, pd.DataFrame(new_records).astype(SCHEMA).set_index(["pubkey", "epoch"], drop=False)] | |
) | |
rewards.sort_index(inplace=True) | |
rewards.to_csv(filename, index=False) | |
new_records = [] | |
rewards.to_csv(filename) | |
return rewards | |
def read_solana_tokens(): | |
tokenlists = [] | |
for path in ["solana.tokenlist.archived.json", "solana.tokenlist.json", "solana.tokenlist.custom.json"]: | |
with open(path, 'rb') as f: | |
tokenlists.append(json.load(f)) | |
# chainId 101 is solana mainnet-beta | |
tokens = { | |
token['address']: token | |
for tokenlist in tokenlists | |
for token in tokenlist['tokens'] | |
if token['chainId'] == 101 | |
} | |
return tokens | |
def format_amount(amt, decimals, decimal_sep='.'): | |
sign, amt = ('', amt) if amt >= 0 else ('-', -amt) | |
one = 10**decimals | |
frac = amt % one | |
frac_whole = format(int(frac), f'0{decimals}') | |
frac_frac = format(frac - int(frac_whole), '.4f')[2:].rstrip('0') | |
whole = amt // one | |
return f"{sign}{whole}{decimal_sep}{frac_whole}{frac_frac}" | |
RE_SIMPLE_COMMODITY = re.compile(r"^[A-Za-z]*$") | |
def amount_to_string(tokens, amt, currency, raw=False): | |
if amt is None: | |
return "" | |
if currency == "EUR" or currency == "USD": | |
return f"{amt} {currency}" | |
decimal_sep = ',' if raw else '.' | |
if currency == "SOL": | |
return f"{format_amount(amt, 9, decimal_sep)} SOL" | |
if isinstance(currency, solana.publickey.PublicKey): | |
currency = str(currency) | |
try: | |
token = tokens[currency] | |
except KeyError: | |
raise RuntimeError( | |
f"unknown token: {currency}, please add to solana.tokenlist.custom.json" | |
) | |
symbol = token["symbol"] if not raw else currency | |
if not RE_SIMPLE_COMMODITY.match(symbol): | |
symbol = f'"{symbol}"' | |
return f'{format_amount(amt, token["decimals"], decimal_sep)} {symbol}' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
"""Generate ledger transactions from solana transactions. | |
Usage: | |
process-txs.py [options] | |
Options: | |
-h, --help Show this screen. | |
-y YEAR, --year YEAR Limit output to transactions executed in the given year | |
-t TZ, --timezone TZ Timezone for output dates [default: Europe/Berlin] | |
--signers CSV CSV with list of public keys which can sign and the owner of them [default: signers.csv] | |
--initial-assets CSV CSV file containing asset state of user accounts at the start of the processing interval | |
--final-assets CSV Save final asset state at the end of the processing interval to CSV file | |
--track-events CSV Save account tracking events to CSV file | |
--manual-ledger LEDGER Ledger file containing entries mapped manually [default: manual.ledger] | |
--manual-aliases CSV CSV file with pubkey,name mapping solana publickeys to ledger account names [default: manual-aliases.csv] | |
--no-map-tokens Do not map tokens to their symbols, emit raw amounts and mint addresses instead | |
""" | |
import base64 | |
import dataclasses | |
import string | |
import json | |
import re | |
import sqlite3 | |
import sys | |
import traceback | |
from collections import defaultdict | |
from dataclasses import dataclass | |
from datetime import datetime, timezone | |
from typing import Any | |
import based58 | |
import pandas as pd | |
from dateutil.tz import gettz | |
from docopt import docopt | |
import constants | |
import ix_parser | |
import solana.message | |
import solana.publickey | |
import solana.transaction | |
from lib import (SolRpc, amount_to_string, fetch_rewards_for_epoch, | |
first_epoch_slot, format_amount, load_rewards, | |
read_solana_tokens, slot_to_epoch) | |
@dataclass(frozen=True, order=True) | |
class TxId: | |
slot: int | |
index: int | |
@dataclass | |
class TransactionRecord: | |
signature: str | |
tx: solana.transaction.Transaction | |
meta: dict | |
timestamp: datetime | |
txid: TxId | |
def token_changes(self): | |
pre_token_by_account = { | |
amt["accountIndex"]: amt for amt in self.meta["preTokenBalances"] | |
} | |
post_token_by_account = { | |
amt["accountIndex"]: amt for amt in self.meta["postTokenBalances"] | |
} | |
token_deltas = [] | |
for ix in set(pre_token_by_account) | set(post_token_by_account): | |
pre = pre_token_by_account.get(ix, {}) | |
post = post_token_by_account.get(ix, {}) | |
if pre.get("mint", None) == post.get("mint", None): | |
delta = int(post["uiTokenAmount"]["amount"]) - int( | |
pre["uiTokenAmount"]["amount"] | |
) | |
token_deltas += [(ix, pre.get("mint"), delta)] | |
continue | |
if pre.get("uiTokenAmount", {}).get("amount", "0") != "0": | |
token_deltas += [ | |
(ix, pre.get("mint"), -int(pre["uiTokenAmount"]["amount"])) | |
] | |
if post.get("uiTokenAmount", {}).get("amount", "0") != "0": | |
token_deltas += [ | |
(ix, post.get("mint"), int(post["uiTokenAmount"]["amount"])) | |
] | |
msg = self.tx.compile_message() | |
out = [] | |
for idx, mint, delta in token_deltas: | |
if not delta: | |
continue | |
out += [(msg.account_keys[idx], idx, mint, delta)] | |
return out | |
def sol_changes(self): | |
native_sol_deltas = [ | |
post - pre | |
for pre, post in zip(self.meta["preBalances"], self.meta["postBalances"]) | |
] | |
msg = self.tx.compile_message() | |
return list(zip(msg.account_keys, native_sol_deltas)) | |
def toplevel_instructions(self): | |
msg = self.tx.compile_message() | |
inner_by_idx = { | |
inner["index"]: len(inner["instructions"]) | |
for inner in self.meta["innerInstructions"] | |
} | |
linear_idx = 0 | |
for idx, ix in enumerate(msg.instructions): | |
inner = inner_by_idx.pop(idx, 0) | |
yield { | |
"program_id_index": ix.program_id_index, | |
"accounts": ix.accounts, | |
"data": ix.data, | |
"inner": False, | |
"num_inner": inner, | |
"linear_idx": linear_idx, | |
"next_linear_idx": linear_idx + 1 + inner, | |
} | |
linear_idx += 1 + inner | |
def all_instructions(self): | |
inner_by_idx = { | |
inner["index"]: inner["instructions"] | |
for inner in self.meta["innerInstructions"] | |
} | |
msg = self.tx.compile_message() | |
for idx, ix in enumerate(msg.instructions): | |
yield { | |
"program_id_index": ix.program_id_index, | |
"accounts": ix.accounts, | |
"data": ix.data, | |
"inner": False, | |
"toplevel_idx": idx, | |
} | |
for inner in inner_by_idx.pop(idx, []): | |
yield { | |
"program_id_index": inner["programIdIndex"], | |
"accounts": bytes(inner["accounts"]), | |
"data": based58.b58decode(inner["data"].encode()), | |
"inner": True, | |
"toplevel_idx": idx, | |
} | |
def successful(self): | |
return 'Ok' in self.meta['status'] | |
@dataclass | |
class TokenBalance: | |
mint: str | |
owner: str | None | |
amount: int | None | |
@staticmethod | |
def deserialize(data): | |
return TokenBalance(**json.loads(data)) | |
def serialize(self): | |
return json.dumps(dataclasses.asdict(self)) | |
@dataclass | |
class StakeAccount: | |
owner: str | |
validator: str | None = None | |
delegated_amount: int | None = None | |
activation_epoch: int | None = None | |
deactivation_epoch: int | None = None | |
lockup_authority: str | None = None | |
lockup_timestamp: int | None = None | |
lockup_epoch: int | None = None | |
@staticmethod | |
def deserialize(data): | |
return StakeAccount(**json.loads(data)) | |
def serialize(self): | |
return json.dumps(dataclasses.asdict(self)) | |
def is_lockup_active(self, slot, timestamp): | |
active_epoch = self.lockup_epoch is not None and slot < first_epoch_slot(slot) | |
active_timestamp = self.lockup_timestamp is not None and timestamp < self.lockup_timestamp | |
return active_epoch or active_timestamp | |
def is_delegated(self, epoch): | |
if self.deactivation_epoch is not None and epoch > self.deactivation_epoch: | |
return False | |
return self.activation_epoch is not None and epoch > self.activation_epoch | |
@dataclass | |
class PublicAccount: | |
asset_delta: dict[str, int] = dataclasses.field(default_factory=dict) | |
@staticmethod | |
def deserialize(data): | |
return PublicAccount(**json.loads(data)) | |
def serialize(self): | |
return json.dumps(dataclasses.asdict(self)) | |
TRACKED_ACCOUNT_STATE_TYPE = { | |
'token': TokenBalance, | |
'stake': StakeAccount, | |
'public': PublicAccount, | |
} | |
@dataclass | |
class TrackedAccount: | |
pubkey: str | |
kind: str | |
native_balance: int | None = None | |
state: Any = None | |
external: bool = False | |
def to_dict(self): | |
return { | |
'pubkey': self.pubkey, | |
'kind': self.kind, | |
'external': self.external, | |
'native_balance': self.native_balance, | |
'state': self.state.serialize() if self.state else '', | |
} | |
def copy(self): | |
args = self.to_dict() | |
args['state'] = '' if not args['state'] else TRACKED_ACCOUNT_STATE_TYPE[args['kind']].deserialize(args['state']) | |
return TrackedAccount(**args) | |
ASSETS_SCHEMA = { | |
'pubkey': str, | |
'kind': str, | |
'external': bool, | |
'native_balance': 'Int64', | |
'state': str, | |
} | |
@dataclass | |
class TrackEvent: | |
txid: TxId | |
event: str | |
data: dict[str, Any] | |
def to_dict(self): | |
return dict( | |
{ | |
'tx_slot': self.txid.slot, | |
'tx_index': self.txid.index, | |
'event': self.event, | |
}, | |
**self.data | |
) | |
class AccountTracker: | |
signers: dict[str, str] | |
assets: dict[str, TrackedAccount] | |
events: list[TrackEvent] | |
last_txid: TxId | |
have_error: bool | |
def __init__(self, signers): | |
self.signers = signers | |
self.assets = { pk: TrackedAccount(pk, 'signer') for pk, owner in self.signers.items() if owner == 'me' } | |
self.events = [] | |
self.last_txid = TxId(-1, 0) | |
self.have_error = False | |
def save_assets(self, filename): | |
records = [ | |
acc.to_dict() for acc in self.assets.values() | |
] | |
pd.DataFrame(records).astype(ASSETS_SCHEMA).to_csv(filename, index=False) | |
def load_assets(self, filename): | |
df: pd.DataFrame = pd.read_csv(filename, dtype=ASSETS_SCHEMA) # type: ignore | |
for _, record in df.iterrows(): | |
tracked = TrackedAccount( | |
pubkey=record.pubkey, | |
kind=record.kind, | |
native_balance=int(record.native_balance) if not pd.isna(record.native_balance) else None, | |
state=TRACKED_ACCOUNT_STATE_TYPE[record.kind].deserialize(record.state) if not pd.isna(record.state) else None, | |
external=record.external, | |
) | |
if tracked.kind == 'signer' and tracked.pubkey not in self.signers: | |
raise RuntimeError(f'asset {tracked} claims to be a signer, but public key is not in list of known signers') | |
existing = self.assets.get(tracked.pubkey, None) | |
if existing is not None and existing.kind != 'signer': | |
raise RuntimeError(f'conflicting initial assets: {existing} vs {tracked}') | |
self.assets[tracked.pubkey] = tracked | |
def is_own_signer(self, pk): | |
return self.signers.get(str(pk), '') == 'me' | |
def is_own_asset(self, pk): | |
asset = self.assets.get(pk) | |
return self.is_own_signer(pk) or (asset and not asset.external) | |
def get_stake_pubkeys(self): | |
return [acc.pubkey for acc in self.assets.values() if acc.kind == 'stake' and not acc.external] | |
def get_public_account(self): | |
self.assets.setdefault('public', TrackedAccount('public', kind='public', state=PublicAccount(), external=True)) | |
return self.assets['public'] | |
def tx_preprocess(self, details: 'TransactionRecordDetails'): | |
assert self.last_txid is None or details.record.txid >= self.last_txid | |
self.last_txid = details.record.txid | |
if self.signers.get(str(details.record.tx.fee_payer), '') == 'public': | |
public = self.get_public_account() | |
public.state.asset_delta.setdefault('SOL', 0) | |
public.state.asset_delta['SOL'] -= min(details.record.meta['fee'], public.state.asset_delta['SOL']) | |
for idx, pubkey in enumerate(details.msg.account_keys): | |
pubkey = str(pubkey) | |
tracked = self.assets.get(pubkey, None) | |
if tracked is None: continue | |
if tracked.native_balance is None: | |
tracked.native_balance = details.native_balances[0][idx] | |
if tracked.native_balance != details.native_balances[0][idx] and not tracked.external: | |
mismatch = { 'attr': 'native_balance', 'chain': details.native_balances[0][idx], 'tracked': tracked.native_balance } | |
self.have_error = True | |
self.events += [TrackEvent(details.record.txid, 'state-mismatch', dict(mismatch, **tracked.to_dict()))] | |
if tracked.kind == 'token': | |
pre = details.token_balances[0][idx] | |
if tracked.state is None and pre is not None: | |
tracked.state = dataclasses.replace(pre) | |
if pre is None and tracked.state is not None: | |
pre = dataclasses.replace(tracked.state) | |
if pre is None and tracked.state is None: continue | |
assert pre is not None and tracked.state is not None | |
if tracked.state.owner is None and pre.owner is not None: | |
tracked.state.owner = pre.owner | |
if pre.owner is None and tracked.state.owner is not None: | |
pre.owner = tracked.state.owner | |
if tracked.state.amount is None and pre.amount is not None: | |
tracked.state.amount = pre.amount | |
if pre.owner != tracked.state.owner and not tracked.external: | |
mismatch = { 'attr': 'owner', 'chain': pre.owner, 'tracked': tracked.state.owner } | |
self.have_error = True | |
self.events += [TrackEvent(details.record.txid, 'state-mismatch', dict(mismatch, **tracked.to_dict()))] | |
if pre.mint != tracked.state.mint and not tracked.external: | |
mismatch = { 'attr': 'mint', 'chain': pre.mint, 'tracked': tracked.state.mint } | |
self.have_error = True | |
self.events += [TrackEvent(details.record.txid, 'state-mismatch', dict(mismatch, **tracked.to_dict()))] | |
if pre.amount != tracked.state.amount and not tracked.external: | |
mismatch = { 'attr': 'amount', 'chain': pre.amount, 'tracked': tracked.state.amount } | |
self.events += [TrackEvent(details.record.txid, 'state-mismatch', dict(mismatch, **tracked.to_dict()))] | |
if not tracked.external: | |
details.token_balances[0][idx] = pre | |
def tx_postprocess(self, details: 'TransactionRecordDetails'): | |
for idx, pubkey in enumerate(details.msg.account_keys): | |
pubkey = str(pubkey) | |
token = details.token_balances[-1][idx] | |
tracked = self.assets.get(pubkey, None) | |
if tracked is not None and token is not None and tracked.kind == 'token' and tracked.state.mint != token.mint: | |
self.untrack(details.record.txid, tracked) | |
if (tracked is None or tracked.kind == 'signer') and token is not None and token.owner is not None and self.is_own_signer(token.owner): | |
tracked = TrackedAccount(pubkey=pubkey, kind='token', native_balance=details.native_balances[-1][idx], state=token) | |
self.track(details.record.txid, tracked) | |
if token.amount is None: | |
data = dict({ 'attr': 'token-balance' }, **tracked.to_dict()) | |
self.have_error = True | |
self.events += [TrackEvent(details.record.txid, 'state-missing', data)] | |
if tracked is None: continue | |
tracked.native_balance = details.native_balances[-1][idx] | |
if tracked.kind == 'token': | |
if token is None: | |
assert tracked.native_balance == 0 | |
tracked.state = token | |
tracked.external = not token or not self.is_own_signer(token.owner) | |
if tracked.kind != 'signer' and tracked.native_balance == 0: | |
assert token is None | |
self.untrack(details.record.txid, tracked) | |
def process_reward(self, reward): | |
txid = TxId(reward['effective_slot'], -1) | |
assert self.last_txid is None or txid >= self.last_txid | |
self.last_txid = txid | |
tracked = self.assets.get(reward['pubkey'], None) | |
if tracked is None: return | |
chain_balance = reward['post_balance'] - reward['amount'] | |
if tracked.native_balance is None or tracked.external: | |
tracked.native_balance = chain_balance | |
if tracked.native_balance != chain_balance: | |
mismatch = { 'attr': 'native_balance', 'chain': chain_balance, 'tracked': tracked.native_balance } | |
self.events += [TrackEvent(txid, 'state-mismatch', dict(mismatch, **tracked.to_dict()))] | |
self.have_error = True | |
if tracked.kind =='stake' and tracked.state.delegated_amount is not None: | |
tracked.state.delegated_amount += reward['amount'] | |
tracked.native_balance = reward['post_balance'] | |
def track(self, txid: TxId, tracked: TrackedAccount): | |
self.events += [TrackEvent(txid, 'track-start', tracked.to_dict())] | |
existing = self.assets.get(tracked.pubkey, None) | |
if existing is not None and existing.kind != 'signer' and not existing.external: | |
mismatch = { 'attr': 'is-empty', 'chain': True, 'tracked': False } | |
self.have_error = True | |
self.events += [TrackEvent(txid, 'state-mismatch', dict(mismatch, **tracked.to_dict()))] | |
self.assets[tracked.pubkey] = tracked | |
def untrack(self, txid: TxId, tracked: TrackedAccount): | |
if tracked.pubkey not in self.assets: | |
return | |
self.events += [TrackEvent(txid, 'track-stop', tracked.to_dict())] | |
if self.is_own_signer(tracked.pubkey): | |
tracked.kind = 'signer' | |
tracked.state = None | |
else: | |
self.assets.pop(tracked.pubkey) | |
class TransactionRecordDetails: | |
record: TransactionRecord | |
msg: solana.message.Message | |
all_instructions: list[dict[str, Any]] | |
native_balances: list[list[int | None]] | |
token_balances: list[list[TokenBalance | None]] | |
token_balance_is_delta: list[bool] | |
def __init__(self, tracker: AccountTracker, record: TransactionRecord): | |
self.record = record | |
num_accounts = len(record.tx.compile_message().account_keys) | |
self.all_instructions = list(record.all_instructions()) | |
self.msg = record.tx.compile_message() | |
self.native_balances = [ [None] * num_accounts for _ in self.all_instructions ] | |
self.token_balances = [ [None] * num_accounts for _ in self.all_instructions ] | |
self.token_balance_is_delta = [False] * num_accounts | |
self.native_balances[0] = list(record.meta['preBalances']) | |
for balance in record.meta['preTokenBalances']: | |
amount = int(balance['uiTokenAmount']['amount']) | |
idx = balance['accountIndex'] | |
balance = TokenBalance(mint=balance['mint'], owner=balance.get('owner', None), amount=amount) | |
if str(self.msg.account_keys[idx]) == '2hLHK6YTkwC5oUKn1mbmv5SwdcJVWQNyyutH1k1AuPp4': | |
balance.owner = '6ZRCB7AAqGre6c72PRz3MHLC73VMYvJ8bi9KHf1HFpNk' | |
self.token_balances[0][idx] = balance | |
self.native_balances.append(list(record.meta['postBalances'])) | |
self.token_balances.append([None] * num_accounts) | |
for balance in record.meta['postTokenBalances']: | |
amount = int(balance['uiTokenAmount']['amount']) | |
idx = balance['accountIndex'] | |
balance = TokenBalance(mint=balance['mint'], owner=balance.get('owner', None), amount=amount) | |
self.token_balances[-1][idx] = balance | |
tracker.tx_preprocess(self) | |
self.native_balances[0][0] -= record.meta['fee'] | |
while True: | |
while True: | |
changed = False | |
for i in range(len(self.all_instructions)): | |
changed = self.propagate(i) or changed | |
if not changed: break | |
changed = False | |
for i in reversed(range(len(self.all_instructions))): | |
changed = self.propagate(i) or changed | |
if not changed: break | |
changed = False | |
for idx, balance in enumerate(self.token_balances[0]): | |
if balance is None: continue | |
if balance.amount is None: | |
self.token_balance_is_delta[i] = True | |
balance.amount = 0 | |
changed = True | |
if not changed: break | |
def token_changes(self): | |
if self.record.meta['postTokenBalances'] or self.record.meta['preTokenBalances']: | |
return self.record.token_changes() | |
out = [] | |
for idx, (pre, post) in enumerate(zip(self.token_balances[0], self.token_balances[-1])): | |
if pre == None and post == None: continue | |
if pre is not None and post is not None and pre.mint == post.mint: | |
assert post.amount != None, 'token post amount should be known' | |
assert pre.amount != None, 'token pre amount should be known' | |
out += [(self.msg.account_keys[idx], idx, pre.mint, post.amount - pre.amount)] | |
continue | |
if pre is not None: | |
assert pre.amount != None, 'token pre amount should be known' | |
out += [(self.msg.account_keys[idx], idx, pre.mint, -pre.amount)] | |
if post is not None: | |
assert post.amount != None, 'token post amount should be known' | |
out += [(self.msg.account_keys[idx], idx, post.mint, post.amount)] | |
return out | |
def token_burns_and_mints(self): | |
account_keys = list(range(len(self.native_balances[0]))) | |
for idx, ix in enumerate(self.all_instructions): | |
invoked_prog = str(self.msg.account_keys[ix["program_id_index"]]) | |
if invoked_prog != constants.SPL_TOKEN_ID: continue | |
parsed = ix_parser.parse_spl_token(account_keys, ix['accounts'], ix['data']) | |
if parsed['instruction'] not in { 'InitializeAccount', 'CloseAccount', 'SyncNative', 'MintTo', 'Burn' }: continue | |
if parsed['instruction'] == 'Burn': | |
pre = self.token_balances[idx][parsed['account']] | |
owner = pre and pre.owner | |
yield (str(self.msg.account_keys[parsed['mint']]), str(self.msg.account_keys[parsed['account']]), owner, -parsed['amount']) | |
continue | |
if parsed['instruction'] == 'MintTo': | |
post = self.token_balances[idx + 1][parsed['account']] | |
owner = post and post.owner | |
yield (str(self.msg.account_keys[parsed['mint']]), str(self.msg.account_keys[parsed['account']]), owner, parsed['amount']) | |
continue | |
pre = self.token_balances[idx][parsed['account']] | |
post = self.token_balances[idx + 1][parsed['account']] | |
mint = (pre and pre.mint) or (post and post.mint) or ('mint' in parsed and str(self.msg.account_keys[parsed['mint']])) | |
if mint != constants.WSOL_MINT_ID: continue | |
if parsed['instruction'] == 'SyncNative': | |
if pre is None or post is None or pre.amount is None or post.amount is None: | |
yield (mint, str(self.msg.account_keys[parsed['account']]), None, None) | |
else: | |
yield (mint, str(self.msg.account_keys[parsed['account']]), post.owner, post.amount - pre.amount) | |
continue | |
if parsed['instruction'] == 'InitializeAccount': | |
if post is None or post.amount is None: | |
yield (mint, str(self.msg.account_keys[parsed['account']]), None, None) | |
else: | |
yield (mint, str(self.msg.account_keys[parsed['account']]), post.owner, post.amount) | |
continue | |
if parsed['instruction'] == 'CloseAccount': | |
if pre is None or pre.amount is None: | |
yield (mint, str(self.msg.account_keys[parsed['account']]), None, None) | |
else: | |
yield (mint, str(self.msg.account_keys[parsed['account']]), pre.owner, -pre.amount) | |
continue | |
def propagate(self, ix_idx): | |
changed = False | |
ix = self.all_instructions[ix_idx] | |
invoked_prog = str(self.msg.account_keys[ix["program_id_index"]]) | |
def handle_token_initialize_account(parsed): | |
acc_idx = parsed['account'] | |
pre_native = self.native_balances[ix_idx][acc_idx] | |
assert self.token_balances[ix_idx][acc_idx] is None, 'only uninitialized accounts can be created' | |
assert pre_native is None or pre_native >= constants.TOKEN_RENT_EXEMPT_AMOUNT, 'must be rent-exempt' | |
mint = parsed['mint'] | |
mint = str(self.msg.account_keys[mint] if isinstance(mint, int) else mint) | |
owner = parsed['owner'] | |
owner = str(self.msg.account_keys[owner] if isinstance(owner, int) else owner) | |
balance = TokenBalance(mint=mint, owner=owner, amount=None) | |
if balance.mint == constants.WSOL_MINT_ID: | |
lamports = self.native_balances[ix_idx][acc_idx] | |
balance.amount = lamports - constants.TOKEN_RENT_EXEMPT_AMOUNT if lamports is not None else None | |
else: | |
balance.amount = 0 | |
changed = self.token_balances[ix_idx + 1][acc_idx] != balance | |
self.token_balances[ix_idx + 1][acc_idx] = balance | |
changed_native = any(list(handle_native_delta(i) for i in ix['accounts'])) | |
changed_token = any(list(handle_token_delta(i) for i in ix['accounts'] if i != acc_idx)) | |
return changed or changed_native or changed_token | |
def handle_token_close_account(parsed): | |
acc_idx = parsed['account'] | |
changed = False | |
post = self.token_balances[ix_idx + 1][acc_idx] | |
assert post is None, 'closed account must be uninit afterwards' | |
pre = self.token_balances[ix_idx][acc_idx] | |
if pre is None: return False | |
pre_native = self.native_balances[ix_idx][acc_idx] | |
post_native = self.native_balances[ix_idx + 1][acc_idx] | |
if pre.mint != constants.WSOL_MINT_ID: | |
if pre.amount is None: | |
pre.amount = 0 | |
changed = True | |
assert pre.amount == 0, 'non-native token account must have zero balance for closing' | |
if pre_native is None: | |
pre_native = constants.TOKEN_RENT_EXEMPT_AMOUNT | |
changed = True | |
assert pre_native == constants.TOKEN_RENT_EXEMPT_AMOUNT, 'non-native token account must have rent-exempt balance' | |
if post_native is None: | |
post_native = 0 | |
changed = True | |
assert post_native == 0, 'token account must have zero balance after closing' | |
for i in ix['accounts']: | |
if i == acc_idx: continue | |
if i == parsed['destination']: | |
if pre_native is not None and post_native is not None: | |
changed = handle_native_delta(i, pre_native - post_native) or changed | |
else: | |
changed = handle_native_delta(i) or changed | |
changed = handle_token_delta(i) or changed | |
return changed | |
def handle_token_sync_native(parsed): | |
changed = False | |
acc_idx = parsed['account'] | |
pre = self.token_balances[ix_idx][acc_idx] | |
post = self.token_balances[ix_idx + 1][acc_idx] | |
pre_native = self.native_balances[ix_idx][acc_idx] | |
post_native = self.native_balances[ix_idx + 1][acc_idx] | |
if pre is None: | |
pre = TokenBalance(mint=constants.WSOL_MINT_ID, owner=None, amount=None) | |
changed = True | |
if post is None: | |
post = TokenBalance(mint=constants.WSOL_MINT_ID, owner=None, amount=None) | |
changed = True | |
assert post.mint == pre.mint, 'mint cannot change' | |
if pre.owner is None and post.owner is not None: | |
pre.owner = post.owner | |
changed = True | |
if post.owner is None and pre.owner is not None: | |
post.owner = pre.owner | |
changed = True | |
assert pre.owner == post.owner, 'owner cannot change' | |
if post_native is None and pre_native is not None: | |
post_native = pre_native | |
changed = True | |
if pre_native is None and post_native is not None: | |
pre_native = post_native | |
changed = True | |
assert pre_native == post_native, 'native balances must match' | |
if post.amount is None and post_native is not None: | |
post.amount = post_native - constants.TOKEN_RENT_EXEMPT_AMOUNT | |
changed = True | |
if post_native is None and post.amount is not None: | |
post_native = post.amount + constants.TOKEN_RENT_EXEMPT_AMOUNT | |
changed = True | |
if post_native is not None and post.amount is not None: | |
assert post_native - constants.TOKEN_RENT_EXEMPT_AMOUNT == post.amount, 'balance must be sync' | |
for i in ix['accounts']: | |
if i == acc_idx: continue | |
changed = handle_native_delta(i, 0) or changed | |
changed = handle_token_delta(i, 0) or changed | |
self.token_balances[ix_idx][acc_idx] = pre | |
self.token_balances[ix_idx + 1][acc_idx] = post | |
self.native_balances[ix_idx][acc_idx] = pre_native | |
self.native_balances[ix_idx + 1][acc_idx] = post_native | |
return changed | |
def handle_token_mint_or_burn(parsed): | |
factor = -1 if parsed['instruction'] == 'Burn' else 1 | |
deltas = defaultdict(int) | |
deltas[parsed['account']] = factor * parsed['amount'] | |
changed = any(list(handle_native_delta(i) for i in ix['accounts'])) | |
return any(list(handle_token_delta(i, deltas[i]) for i in ix['accounts'])) or changed | |
def handle_token_transfer(parsed): | |
src_idx = parsed['source'] | |
dst_idx = parsed['destination'] | |
deltas = defaultdict(int) | |
deltas[src_idx] += -parsed['amount'] | |
deltas[dst_idx] += parsed['amount'] | |
native_deltas = defaultdict(int) | |
all_accs = ( | |
self.token_balances[i][acc_idx] | |
for i in (ix_idx, ix_idx + 1) | |
for acc_idx in (src_idx, dst_idx) | |
) | |
mint = next((acc.mint for acc in all_accs if acc is not None), None) | |
if mint == constants.WSOL_MINT_ID: | |
native_deltas[src_idx] = -parsed['amount'] | |
native_deltas[dst_idx] = parsed['amount'] | |
if mint is not None: | |
for i in (ix_idx, ix_idx + 1): | |
for acc_idx in (src_idx, dst_idx): | |
acc = self.token_balances[i][acc_idx] | |
if acc is not None: continue | |
self.token_balances[i][acc_idx] = TokenBalance(mint=mint, owner=None, amount=None) | |
changed = True | |
ignored_accs = {src_idx, dst_idx} if mint is None else set() | |
changed = any(list(handle_native_delta(i, native_deltas[i]) for i in ix['accounts'] if i not in ignored_accs)) | |
changed = any(list(handle_token_delta(i, deltas[i]) for i in ix['accounts'])) or changed | |
return changed | |
def handle_token_approve_or_revoke(parsed): | |
src_idx = parsed['source'] | |
authority = parsed['authority'] | |
authority = str(self.msg.account_keys[authority] if isinstance(authority, int) else authority) | |
changed = any(list(handle_native_delta(i) for i in ix['accounts'])) | |
changed = any(list(handle_token_delta(i) for i in ix['accounts'])) or changed | |
for i in (ix_idx, ix_idx + 1): | |
acc = self.token_balances[i][src_idx] | |
if acc is not None and acc.owner is None: | |
acc.owner = authority | |
changed = True | |
assert acc is None or acc.owner == authority, 'authority must sign for approve/revoke' | |
self.token_balances[i][src_idx] = acc | |
return changed | |
def handle_token_set_authority(parsed): | |
if parsed['authority_type'] != 'AccountOwner': | |
return any(handle_token_delta(i) for i in ix['accounts']) | |
changed = False | |
acc_idx = parsed['account'] | |
new_authority = parsed['new_authority'] | |
if isinstance(new_authority, int): | |
new_authority = self.msg.account_keys[new_authority] | |
new_authority = str(new_authority) | |
authority = parsed['authority'] | |
authority = str(self.msg.account_keys[authority] if isinstance(authority, int) else authority) | |
pre = self.token_balances[ix_idx][acc_idx] | |
post = self.token_balances[ix_idx + 1][acc_idx] | |
any_acc = pre or post | |
if not any_acc: return False | |
if pre is None: | |
pre = dataclasses.replace(post, owner=authority) | |
changed = True | |
if post is None: | |
post = dataclasses.replace(pre, owner=new_authority) | |
changed = True | |
assert pre is not None and post is not None, 'either pre or post must exist at this point' | |
if pre.amount is None: | |
pre.amount = post.amount | |
changed = True | |
if post.amount is None: | |
post.amount = pre.amount | |
changed = True | |
if pre.owner is None: | |
pre.owner = authority | |
changed = True | |
if post.owner is None: | |
post.owner = new_authority | |
changed = True | |
assert pre.mint == post.mint, 'mint cannot change' | |
assert pre.amount == post.amount, 'amount cannot change' | |
assert pre.owner == authority, 'authority must be previous owner' | |
assert post.owner == new_authority, 'new_authority must be new owner' | |
self.token_balances[ix_idx][acc_idx] = pre | |
self.token_balances[ix_idx + 1][acc_idx] = post | |
changed = any(list(handle_native_delta(i) for i in ix['accounts'])) or changed | |
return any(list(handle_token_delta(i) for i in ix['accounts'] if i != acc_idx)) or changed | |
def handle_token_delta(acc_idx, delta=0): | |
changed = False | |
pre = self.token_balances[ix_idx][acc_idx] | |
post = self.token_balances[ix_idx + 1][acc_idx] | |
any_acc = pre or post | |
if not any_acc: return False | |
if pre is None: | |
pre = dataclasses.replace(post, amount=None) | |
changed = True | |
if post is None: | |
post = dataclasses.replace(pre, amount=None) | |
changed = True | |
assert pre is not None and post is not None | |
if pre.amount is None and post.amount is not None: | |
pre.amount = post.amount - delta | |
changed = True | |
if post.amount is None and pre.amount is not None: | |
post.amount = pre.amount + delta | |
changed = True | |
if pre.owner is None and post.owner is not None: | |
pre.owner = post.owner | |
changed = True | |
if post.owner is None and pre.owner is not None: | |
post.owner = pre.owner | |
changed = True | |
assert pre.mint == post.mint, 'mint cannot change' | |
assert pre.owner == post.owner, 'owner cannot change' | |
if pre.amount is not None and post.amount is not None: | |
assert pre.amount + delta == post.amount, 'amount must match' | |
else: | |
assert pre.amount is None and post.amount is None | |
self.token_balances[ix_idx][acc_idx] = pre | |
self.token_balances[ix_idx + 1][acc_idx] = post | |
return changed | |
def handle_native_delta(acc_idx, delta=0): | |
changed = False | |
pre = self.native_balances[ix_idx][acc_idx] | |
post = self.native_balances[ix_idx + 1][acc_idx] | |
if pre is None and post is None: return False | |
if pre is None: | |
assert post is not None | |
pre = post - delta | |
changed = True | |
if post is None: | |
assert pre is not None | |
post = pre + delta | |
changed = True | |
assert pre + delta == post, 'amount must match' | |
self.native_balances[ix_idx][acc_idx] = pre | |
self.native_balances[ix_idx + 1][acc_idx] = post | |
return changed | |
def handle_system_create_account(parsed): | |
changed = False | |
dest_pre = self.native_balances[ix_idx][parsed['destination']] | |
if dest_pre is None: | |
dest_pre = 0 | |
changed = True | |
assert dest_pre == 0, 'create account destination must have zero balance' | |
self.native_balances[ix_idx][parsed['destination']] = dest_pre | |
native_deltas = defaultdict(int) | |
native_deltas[parsed['source']] = -parsed['amount'] | |
native_deltas[parsed['destination']] = parsed['amount'] | |
native_changed = any(list(handle_native_delta(i, native_deltas[i]) for i in ix['accounts'])) | |
return changed or native_changed | |
def handle_system_transfer(parsed): | |
native_deltas = defaultdict(int) | |
native_deltas[parsed['source']] = -parsed['amount'] | |
native_deltas[parsed['destination']] = parsed['amount'] | |
return any(list(handle_native_delta(i, native_deltas[i]) for i in ix['accounts'])) | |
def handle_system_withdraw_nonce_account(parsed): | |
native_deltas = defaultdict(int) | |
native_deltas[parsed['account']] = -parsed['amount'] | |
native_deltas[parsed['destination']] = parsed['amount'] | |
return any(list(handle_native_delta(i, native_deltas[i]) for i in ix['accounts'])) | |
def handle_not_implemented(*args, **_kwargs): | |
raise NotImplemented | |
token_handlers = { | |
'MintTo': handle_token_mint_or_burn, | |
'Burn': handle_token_mint_or_burn, | |
'InitializeAccount': handle_token_initialize_account, | |
'CloseAccount': handle_token_close_account, | |
'Transfer': handle_token_transfer, | |
'SetAuthority': handle_token_set_authority, | |
'SyncNative': handle_token_sync_native, | |
'Approve': handle_token_approve_or_revoke, | |
'Revoke': handle_token_approve_or_revoke, | |
} | |
system_handlers = { | |
'CreateAccount': handle_system_create_account, | |
'Transfer': handle_system_transfer, | |
'CreateAccountWithSeed': handle_not_implemented, | |
'TransferWithSeed': handle_not_implemented, | |
'WithdrawNonceAccount': handle_system_withdraw_nonce_account, | |
} | |
# propagate balances of readonly accounts and accounts not used by current instruction | |
used_accs = set(ix['accounts']) | |
for acc_idx in range(len(self.native_balances[ix_idx])): | |
is_used = acc_idx in used_accs | |
is_writable = self.msg.is_account_writable(acc_idx) | |
known_nonmut_progs = { constants.SPL_ATA_ID } | |
if is_used and is_writable and invoked_prog not in known_nonmut_progs: continue | |
changed = handle_native_delta(acc_idx, 0) or changed | |
changed = handle_token_delta(acc_idx, 0) or changed | |
# propagate token balances of accounts if invoked program is not the token program | |
account_keys = list(range(len(self.native_balances[ix_idx]))) | |
if invoked_prog != constants.SPL_TOKEN_ID: | |
for acc_idx in ix['accounts']: | |
changed = handle_token_delta(acc_idx, 0) or changed | |
else: | |
parsed = ix_parser.parse_spl_token(account_keys, ix['accounts'], ix['data']) | |
handler = token_handlers.get(parsed['instruction'], None) | |
if handler is not None: | |
changed = handler(parsed) or changed | |
else: | |
for acc_idx in ix['accounts']: | |
changed = handle_token_delta(acc_idx, 0) or changed | |
changed = handle_native_delta(acc_idx, 0) or changed | |
if invoked_prog == constants.SYSTEM_PROGRAM_ID: | |
parsed = ix_parser.parse_system(account_keys, ix['accounts'], ix['data']) | |
handler = system_handlers.get(parsed['instruction'], None) | |
if handler is not None: | |
changed = handler(parsed) or changed | |
else: | |
for acc_idx in ix['accounts']: | |
changed = handle_token_delta(acc_idx, 0) or changed | |
changed = handle_native_delta(acc_idx, 0) or changed | |
return changed | |
RE_LEDGER_POSTING = re.compile(r'^[ \t]+(?P<account>"(?:[^"\\]|\\.)*"|(?:[ \t]?[^ \t]+)*)(?:[ \t]{2,}(?P<amount_and_trailer>.*))?$') | |
RE_AMOUNT_TOKEN = re.compile(r'^[ \t]*("(?:[^"\\]|\\.)*"|-|\+|[^ \t-.,0-9;=@"]+|;|=|@|[,.]*[0-9][0-9,.]*(?:[eE][+-]?[0-9]*)?|[eE][+-]?[0-9]*)') | |
RE_AMOUNT_VALUE = re.compile(r'^(?P<value>[,.]*[0-9][0-9,.]*)?(?:[eE](?P<exponent>[+-]?[0-9]*))?$') | |
RE_AMOUNT_CURRENCY = re.compile(r'^"((?:[^"\\]|\\.)*)"|([^ \t-.,0-9;=@"]+)$') | |
@dataclass | |
class LedgerPosting: | |
account: str | |
amount: int | float | |
currency: str | |
trailer: str | |
@staticmethod | |
def from_line(line): | |
if not line or line[0] not in " \t": | |
raise ValueError('posting line must be indented, but is not: ' + line) | |
match = RE_LEDGER_POSTING.match(line) | |
if not match: | |
raise ValueError('invalid ledger posting: ' + line) | |
account = match.group('account') | |
rest = match.group('amount_and_trailer') | |
amount_abs = float('nan') | |
sign = None | |
trailer = '' | |
currency = '' | |
while rest: | |
token_match = RE_AMOUNT_TOKEN.match(rest) | |
if not token_match: | |
raise ValueError(f'invalid posting at {rest}: {line}') | |
rest = rest[token_match.end():] | |
token = token_match.group(1) | |
if token in '@=;': | |
trailer = token + rest | |
break | |
if token in {'+', '-'}: | |
if sign: | |
raise ValueError(f'invalid amount, duplicate sign: {line}') | |
sign = token | |
continue | |
value_match = RE_AMOUNT_VALUE.match(token) | |
if value_match: | |
value = value_match.group('value') | |
if ',,' in value: | |
raise ValueError(f'invalid amount, duplicate digit separator: {line}') | |
value = value.replace(',','') | |
if '.' in value: | |
amount_abs = float(value) | |
elif value: | |
amount_abs = int(value) | |
else: | |
amount_abs = 0 | |
e = value_match.group('exponent') | |
if e: | |
amount_abs = amount_abs * pow(10, int(e)) | |
continue | |
currency_match = RE_AMOUNT_CURRENCY.match(token) | |
if currency_match: | |
currency = currency_match.group(1) | |
if currency is None: | |
currency = currency_match.group(2) | |
continue | |
raise AssertionError(f'token should be handled: {repr(token)}') | |
if sign is not None and pd.isna(amount_abs): | |
raise ValueError(f'invalid amount, sign without value in posting: {line}') | |
if currency and pd.isna(amount_abs): | |
raise ValueError(f'invalid amount, currency without value in posting: {line}') | |
amount = -amount_abs if sign == '-' else amount_abs | |
return LedgerPosting(account, amount, currency, trailer) | |
LEDGER_ENTRY_HEADER = re.compile(r'^(?P<date>[0-9/\-.]+)[ \t](?P<description>.*)$') | |
LEDGER_ENTRY_COMMENT = re.compile(r'^[ \t]*[;*#](.*)$') | |
LEDGER_TAG = re.compile(r'(?P<name>[^ ,\n]+):(?P<value>[^,\n]*)') | |
@dataclass | |
class LedgerEntry: | |
date_str: str | |
description: str | |
comment: str = '' | |
postings: list[LedgerPosting] = dataclasses.field(default_factory=list) | |
tags: set = dataclasses.field(default_factory=set) | |
@staticmethod | |
def new_for_timestamp(tz, timestamp, description): | |
date_str = timestamp.astimezone(tz).strftime("%Y-%m-%d") | |
return LedgerEntry(date_str, description, comment=f'timestamp:{timestamp}\n') | |
@staticmethod | |
def from_lines(ls): | |
if not ls: raise ValueError('empty ledger entry, need at least one line') | |
header_match = LEDGER_ENTRY_HEADER.match(ls[0]) | |
if not header_match: | |
raise ValueError(f'first line of ledger entry is not a valid header: {ls[0]}') | |
ls = ls[1:] | |
comment = '' | |
while ls: | |
m = LEDGER_ENTRY_COMMENT.match(ls[0]) | |
if not m: break | |
comment += m.group(1) + '\n' | |
ls = ls[1:] | |
tags = set() | |
for tag in LEDGER_TAG.finditer(comment): | |
name = tag.group('name') | |
value = tag.group('value') | |
if value: | |
tags.add(name + ':' + value) | |
else: | |
tags.add(name) | |
postings = [LedgerPosting.from_line(l) for l in ls] | |
date = header_match.group('date') | |
desc = header_match.group('description') | |
return LedgerEntry(date, desc, comment, postings, tags) | |
def add_posting(self, account, amount, currency, trailer=''): | |
self.postings.append(LedgerPosting(account, amount, currency, trailer)) | |
def balance_for(self, currency): | |
return sum(posting.amount for posting in self.postings if posting.currency == currency) | |
def merge_postings(self): | |
total_delta: dict[tuple[str,str], int|float] = defaultdict(int) | |
for posting in self.postings: | |
if posting.trailer.strip(): continue | |
total_delta[(posting.account, posting.currency)] += posting.amount | |
new_postings = [] | |
for posting in self.postings: | |
if posting.trailer.strip(): | |
new_postings += [posting] | |
continue | |
delta = total_delta.pop((posting.account, posting.currency), 0) | |
if not delta: continue | |
new_postings += [LedgerPosting(posting.account, delta, posting.currency, "")] | |
self.postings = new_postings | |
def print(self, tokens, raw): | |
print(f'{self.date_str} {self.description}') | |
for line in self.comment.strip().split('\n'): | |
if line.strip(): | |
print(f' ; {line.strip()}') | |
tag_comment = '' | |
for tag in self.tags: | |
tag = tag + ':' if ':' not in tag else tag | |
if tag in self.comment: continue | |
tag_comment += tag + ',' | |
if tag_comment: | |
print(f' ; {tag_comment}') | |
for posting in self.postings: | |
if not posting.amount: continue | |
trailer = '' if not posting.trailer.strip() else ' ' + posting.trailer.strip() | |
if pd.isna(posting.amount): | |
if trailer: | |
trailer = ' ' + trailer | |
print(f' {posting.account}{trailer}') | |
else: | |
amount = amount_to_string(tokens, posting.amount, posting.currency, raw) | |
print(f' {posting.account} {amount}{trailer}') | |
def parse_ledger_file(f): | |
line = next(f, None) | |
while line is not None: | |
line = line.rstrip('\n') | |
if not line.strip() or LEDGER_ENTRY_COMMENT.match(line): | |
line = next(f, None) | |
continue | |
entry_lines = [line] | |
while True: | |
line = next(f, None) | |
if not line or not line.strip(): break | |
line = line.rstrip('\n') | |
if line[0] not in ' \t': break | |
entry_lines += [line] | |
yield LedgerEntry.from_lines(entry_lines) | |
def account_pubkey(account_keys, pk_or_idx): | |
if pk_or_idx is None: return None | |
if isinstance(pk_or_idx, int): | |
return str(account_keys[pk_or_idx]) | |
return str(pk_or_idx) | |
class Processor: | |
def __init__(self, tz, rpc: SolRpc, account_tracker: AccountTracker, rewards: pd.DataFrame, begin: int, end: int|float, manual_entries: dict[str, LedgerEntry], no_map_tokens: bool): | |
epoch_info = rpc.epochInfo() | |
self.tokens = read_solana_tokens() | |
self.transfer_mapping = pd.read_csv('transfer-mapping.csv', dtype=str, keep_default_na=False).set_index('pubkey').to_dict('index') | |
self.tz = tz | |
self.rpc = rpc | |
self.account_tracker = account_tracker | |
self.last_epoch = epoch_info['epoch'] | |
self.last_slot = epoch_info['absoluteSlot'] | |
self.rewards = rewards | |
self.begin = begin | |
self.end = end | |
self.next_reward_epoch = 0 | |
self.remaining_epoch_rewards = [] | |
self.manual_entries = manual_entries | |
self.no_map_tokens = no_map_tokens | |
self.aliases = {} | |
self.current_slot = -1 | |
self.current_timestamp = -1 | |
self.ix_processed = set() | |
def entry_for_tx_generic(self, details: TransactionRecordDetails) -> LedgerEntry: | |
record = details.record | |
account_keys = details.msg.account_keys | |
fee_payer = account_keys[0] | |
entry = LedgerEntry.new_for_timestamp(self.tz, details.record.timestamp, f'{fee_payer} | unknown') | |
entry.comment += f'signature:{details.record.signature}\nhttps://solscan.io/tx/{details.record.signature}\n' | |
entry.comment += f'fee_payer:{details.record.tx.fee_payer}\n' | |
for signer in details.msg.account_keys[:details.msg.header.num_required_signatures]: | |
entry.comment += f'signer:{signer}\n' | |
for acc, delta in record.sol_changes(): | |
entry.add_posting(f'raw:solana:{acc}', delta, 'SOL') | |
for acc, _, mint, delta in details.token_changes(): | |
if not delta: | |
continue | |
entry.add_posting(f'raw:solana:{acc}', delta, mint) | |
if str(mint) == constants.WSOL_MINT_ID: | |
entry.add_posting(f'raw:solana:{acc}', -delta, 'SOL') | |
unknown_mint_or_burn_amount = set() | |
for mint, acc, owner, amount in details.token_burns_and_mints(): | |
if amount is None: | |
unknown_mint_or_burn_amount.add(mint) | |
continue | |
if mint == constants.WSOL_MINT_ID: | |
acc = 'equity:conversion:solana:wsol' if self.account_tracker.is_own_signer(owner) else 'external:solana:conversion:wsol' | |
entry.add_posting(acc, -amount, mint) | |
entry.add_posting(acc, amount, 'SOL') | |
continue | |
entry.add_posting(f'equity:solana:mint:{mint}', -amount, mint) | |
is_scam = any('scam' in self.tokens.get(posting.currency, {}).get('tags', []) for posting in entry.postings) | |
is_scam = is_scam or any('scam' in self.tokens.get(str(key), {}).get('tags', []) for key in account_keys) | |
if not self.account_tracker.is_own_signer(fee_payer): | |
entry.tags.add('external') | |
if is_scam: | |
entry.tags.add('scam') | |
if record.successful(): | |
wsol_balance = entry.balance_for(constants.WSOL_MINT_ID) | |
if wsol_balance != 0: | |
print(f'warning: corrected wSOL balance for {details.record.signature}', file=sys.stderr) | |
assert constants.WSOL_MINT_ID in unknown_mint_or_burn_amount | |
entry.add_posting(f'equity:solana:mint:{constants.WSOL_MINT_ID}', -wsol_balance, constants.WSOL_MINT_ID) | |
for mint in unknown_mint_or_burn_amount: | |
if mint == constants.WSOL_MINT_ID: continue | |
raise RuntimeError(f'mint or burn amount for mint {mint} should be known, as it is not a wsol mint') | |
else: | |
# a failed transaction does not modify anything except fees | |
entry.postings = [ posting for posting in entry.postings if posting.currency == 'SOL' ] | |
entry.tags.add('failed') | |
if self.account_tracker.signers.get(str(account_keys[0]), '') in { 'me', 'public' }: | |
entry.add_posting(f"expenses:solana:fees:network:{account_keys[0]}", record.meta['fee'], 'SOL') | |
else: | |
entry.add_posting(f"external:solana:fees", record.meta['fee'], 'SOL') | |
entry.add_posting(f"external:solana:{account_keys[0]}", -record.meta['fee'], 'SOL') | |
entry.add_posting(f"raw:solana:{account_keys[0]}", record.meta['fee'], 'SOL') | |
balance = entry.balance_for('SOL') | |
if balance != 0: | |
rent_one_epoch_zero_size = 2439 | |
assert balance < 0 and ( | |
(-balance) % rent_one_epoch_zero_size == 0 | |
or -balance in record.meta["preBalances"] | |
) | |
entry.add_posting(f'expenses:solana:fees:rent', -balance, 'SOL') | |
entry.merge_postings() | |
return entry | |
def entry_for_inflation_reward(self, reward) -> LedgerEntry: | |
self.account_tracker.process_reward(reward) | |
desc = f"{reward['pubkey']} | staking rewards for epoch {reward['epoch']}" | |
entry = LedgerEntry.new_for_timestamp(self.tz, reward['timestamp'].to_pydatetime(), desc) | |
entry.tags.add('kind:stake-reward') | |
acc = self.stake_pubkey_delegated_name(reward['pubkey'], reward['epoch']) | |
rent = 0 if ':delegated:' not in acc else constants.STAKE_RENT_EXEMPT_AMOUNT | |
assertion = f"= {format_amount(reward['post_balance'] - rent, 9, ',' if self.no_map_tokens else '.')} SOL" | |
tracked = self.account_tracker.assets.get(reward['pubkey']) | |
if ':delegated:' in acc and tracked and tracked.state.deactivation_epoch == reward['epoch']: | |
assertion = f'= 0 SOL' | |
entry.add_posting(f"{acc}", reward['amount'], 'SOL', assertion) | |
if tracked and tracked.external: | |
entry.add_posting(f'external:solana:inflation', -reward['amount'], 'SOL') | |
else: | |
assert tracked.state.validator is not None | |
entry.add_posting(f'income:misc:staking:solana:{tracked.state.validator}', -reward["amount"], "SOL"), | |
return entry | |
def process_vote_withdraws(self, details: TransactionRecordDetails, entry: LedgerEntry): | |
account_keys = details.record.tx.compile_message().account_keys | |
if constants.VOTE_PROGRAM_ID not in { str(x) for x in account_keys }: | |
return | |
for idx, ix in enumerate(details.record.toplevel_instructions()): | |
prog = str(account_keys[ix['program_id_index']]) | |
if prog != constants.VOTE_PROGRAM_ID: continue | |
parsed = ix_parser.parse_vote(account_keys, ix['accounts'], ix['data']) | |
if parsed['instruction'] == 'Withdraw': | |
self.ix_processed.add(idx) | |
yield parsed | |
def process_stake(self, details: TransactionRecordDetails, entry: LedgerEntry): | |
record = details.record | |
account_keys = record.tx.compile_message().account_keys | |
if constants.STAKE_PROGRAM_ID not in { str(x) for x in account_keys }: | |
return | |
for idx, ix in enumerate(record.all_instructions()): | |
prog = str(account_keys[ix['program_id_index']]) | |
if prog != constants.STAKE_PROGRAM_ID: continue | |
parsed = ix_parser.parse_stake(range(len(account_keys)), ix['accounts'], ix['data']) | |
if parsed['instruction'] == 'Initialize': | |
withdrawer = account_pubkey(account_keys, parsed['authorized']['withdrawer']) | |
external = not self.account_tracker.is_own_signer(withdrawer) | |
pk = str(account_keys[parsed['account']]) | |
lockup = parsed['lockup'] | |
state = StakeAccount(withdrawer, lockup_authority=str(lockup['custodian']), lockup_timestamp=lockup['unix_timestamp'], lockup_epoch=lockup['epoch']) | |
tracked = TrackedAccount(pk, 'stake', record.meta['postBalances'][parsed['account']], state, external=external) | |
payers = {} | |
if not ix['inner']: | |
self.ix_processed.add(ix['toplevel_idx']) | |
# find create account instruction for initialize, if in same tx | |
for create_idx, create_ix in enumerate(record.toplevel_instructions()): | |
if create_idx >= ix['toplevel_idx']: break | |
if parsed['account'] not in create_ix['accounts']: continue | |
if str(account_keys[create_ix['program_id_index']]) != constants.SYSTEM_PROGRAM_ID: continue | |
system = ix_parser.parse_system(range(len(account_keys)), create_ix['accounts'], create_ix['data']) | |
acc = system.get('account', system.get('destination', None)) | |
if acc == parsed['account'] and system['instruction'] in {'CreateAccount', 'Transfer', 'Assign', 'Allocate'}: | |
self.ix_processed.add(create_idx) | |
if 'source' in system: | |
payers[str(account_keys[system['source']])] = system['amount'] | |
yield 'new', pk, payers | |
if state.lockup_authority or not tracked.external: | |
self.account_tracker.track(details.record.txid, tracked) | |
if parsed['instruction'] == 'Authorize' and parsed['kind'] == 'Staker': | |
if not ix['inner']: | |
self.ix_processed.add(ix['toplevel_idx']) | |
if parsed['instruction'] == 'Authorize' and parsed['kind'] == 'Withdrawer': | |
pk = str(account_keys[parsed['account']]) | |
tracked = self.account_tracker.assets.get(pk) | |
new_authority = account_pubkey(account_keys, parsed['new_authority']) | |
external = not self.account_tracker.is_own_signer(new_authority) | |
if not ix['inner']: | |
self.ix_processed.add(ix['toplevel_idx']) | |
if not tracked: | |
if external: continue | |
if parsed['custodian'] is not None: | |
data = { | |
'pubkey': pk, | |
'kind': 'stake', | |
'external': False, | |
} | |
self.account_tracker.events += [TrackEvent(details.record.txid, 'state-missing', data)] | |
self.account_tracker.have_error = True | |
state = StakeAccount(new_authority) | |
tracked = TrackedAccount(pk, 'stake', record.meta['postBalances'][parsed['account']], state, external=False) | |
self.account_tracker.track(details.record.txid, tracked) | |
yield 'new', pk, {} | |
else: | |
assert tracked.kind == 'stake' | |
before = tracked.copy() | |
tracked.external = external | |
tracked.state.owner = new_authority | |
yield 'changed', before | |
if tracked.state.lockup_authority is None and tracked.external: | |
self.account_tracker.untrack(details.record.txid, tracked) | |
else: | |
self.account_tracker.events += [TrackEvent(details.record.txid, 'track-change', tracked.to_dict())] | |
if parsed['instruction'] == 'Split': | |
src = str(account_keys[parsed['source']]) | |
dest = str(account_keys[parsed['destination']]) | |
if not ix['inner']: | |
self.ix_processed.add(ix['toplevel_idx']) | |
# find create account instruction for initialize, if in same tx | |
for create_idx, create_ix in enumerate(record.toplevel_instructions()): | |
if create_idx >= ix['toplevel_idx']: break | |
if parsed['destination'] not in create_ix['accounts']: continue | |
if str(account_keys[create_ix['program_id_index']]) != constants.SYSTEM_PROGRAM_ID: continue | |
system = ix_parser.parse_system(range(len(account_keys)), create_ix['accounts'], create_ix['data']) | |
acc = system.get('account', system.get('destination', None)) | |
if acc == parsed['destination'] and system['instruction'] in {'CreateAccount', 'Transfer', 'Assign', 'Allocate'}: | |
self.ix_processed.add(create_idx) | |
tracked_src = self.account_tracker.assets.get(src) | |
authority = str(account_keys[parsed['authority']]) | |
if tracked_src is None: | |
state = StakeAccount(authority) | |
tracked_src = TrackedAccount(src, 'stake', external=not self.account_tracker.is_own_signer(state.owner), state=state) | |
if not tracked_src.external: | |
data = { | |
'pubkey': src, | |
'kind': 'stake', | |
'external': False, | |
} | |
self.account_tracker.events += [TrackEvent(details.record.txid, 'state-missing', data)] | |
self.account_tracker.have_error = True | |
assert tracked_src.kind == 'stake' | |
state = StakeAccount.deserialize(tracked_src.state.serialize()) | |
tracked_dst = TrackedAccount(dest, 'stake', record.meta['postBalances'][parsed['destination']], state, external=tracked_src.external) | |
if not tracked_dst.external: | |
self.account_tracker.track(details.record.txid, tracked_dst) | |
yield 'split', tracked_src.copy(), tracked_dst.copy() | |
if not tracked_src.external: | |
if tracked_src.state.is_delegated(slot_to_epoch(self.current_slot)): | |
pre_balance = details.native_balances[idx][parsed['destination']] or 0 | |
split_staked = parsed['amount'] - pre_balance | |
stake_delta_src = min(parsed['amount'], tracked_src.state.delegated_amount) | |
tracked_src.state.delegated_amount -= stake_delta_src | |
tracked_dst.state.delegated_amount = split_staked | |
if parsed['instruction'] == 'Merge': | |
src = str(account_keys[parsed['source']]) | |
dst = str(account_keys[parsed['destination']]) | |
tracked_src = self.account_tracker.assets.get(src) | |
tracked_dst = self.account_tracker.assets.get(dst) | |
if not ix['inner']: | |
self.ix_processed.add(ix['toplevel_idx']) | |
if tracked_src is None and tracked_dst is not None and not tracked_dst.external: | |
data = { | |
'pubkey': src, | |
'kind': 'stake', | |
'external': False, | |
} | |
self.account_tracker.events += [TrackEvent(details.record.txid, 'state-missing', data)] | |
self.account_tracker.have_error = True | |
if tracked_dst is None and tracked_src is not None and not tracked_src.external: | |
data = { | |
'pubkey': dst, | |
'kind': 'stake', | |
'external': False, | |
} | |
self.account_tracker.events += [TrackEvent(details.record.txid, 'state-missing', data)] | |
self.account_tracker.have_error = True | |
if tracked_src is None or tracked_dst is None or not record.successful(): continue | |
yield 'merge', tracked_src.copy(), tracked_dst.copy() | |
assert tracked_src.external == tracked_dst.external | |
if tracked_src.external or not record.successful(): continue | |
if tracked_dst.state.is_delegated(slot_to_epoch(self.current_slot)): | |
tracked_dst.state.delegated_amount += tracked_src.state.delegated_amount | |
if parsed['instruction'] == 'SetLockup': | |
if not ix['inner']: | |
self.ix_processed.add(ix['toplevel_idx']) | |
pk = str(account_keys[parsed['account']]) | |
tracked = self.account_tracker.assets.get(pk) | |
custodian_or_withdrawer = account_pubkey(account_keys, parsed['signer']) | |
if not tracked or not record.successful(): | |
continue | |
assert tracked.kind == 'stake' | |
if tracked.state.owner != custodian_or_withdrawer and not tracked.state.lockup_authority: | |
tracked.state.lockup_authority = custodian_or_withdrawer | |
new_authority = account_pubkey(account_keys, parsed['lockup']['custodian']) | |
if new_authority: | |
tracked.state.lockup_authority = new_authority | |
if parsed['lockup']['unix_timestamp'] is not None: | |
tracked.state.lockup_timestamp = parsed['lockup']['unix_timestamp'] | |
if parsed['lockup']['epoch'] is not None: | |
tracked.state.lockup_epoch = parsed['lockup']['epoch'] | |
self.account_tracker.events += [TrackEvent(details.record.txid, 'track-change', tracked.to_dict())] | |
if parsed['instruction'] == 'DelegateStake': | |
if not ix['inner']: | |
self.ix_processed.add(ix['toplevel_idx']) | |
pk = str(account_keys[parsed['account']]) | |
vote = account_pubkey(account_keys, parsed['vote']) | |
tracked = self.account_tracker.assets.get(pk) | |
if not tracked or (tracked.external and tracked.kind != 'stake') or not record.successful(): | |
continue | |
assert tracked.kind == 'stake' | |
if tracked.state.validator == vote and tracked.state.activation_epoch == slot_to_epoch(self.current_slot): continue | |
yield 'delegate', tracked.copy() | |
tracked.state.validator = vote | |
tracked.state.deactivation_epoch = None | |
tracked.state.activation_epoch = slot_to_epoch(self.current_slot) | |
tracked.state.delegated_amount = tracked.native_balance - constants.STAKE_RENT_EXEMPT_AMOUNT | |
self.account_tracker.events += [TrackEvent(details.record.txid, 'track-change', tracked.to_dict())] | |
if parsed['instruction'] == 'Deactivate': | |
if not ix['inner']: | |
self.ix_processed.add(ix['toplevel_idx']) | |
pk = str(account_keys[parsed['account']]) | |
tracked = self.account_tracker.assets.get(pk) | |
if not tracked or (tracked.external and tracked.kind != 'stake') or not record.successful(): | |
continue | |
assert tracked.kind == 'stake' | |
if tracked.state.deactivation_epoch == slot_to_epoch(self.current_slot): continue | |
yield 'deactivate', tracked.copy() | |
tracked.state.deactivation_epoch = slot_to_epoch(self.current_slot) | |
self.account_tracker.events += [TrackEvent(details.record.txid, 'track-change', tracked.to_dict())] | |
if parsed['instruction'] == 'Withdraw': | |
if not ix['inner']: | |
self.ix_processed.add(ix['toplevel_idx']) | |
if record.successful(): | |
yield 'withdraw', str(account_keys[parsed['account']]), str(account_keys[parsed['destination']]) | |
def process_system_transfers(self, details: TransactionRecordDetails): | |
record = details.record | |
account_keys = record.tx.compile_message().account_keys | |
for idx, ix in enumerate(record.toplevel_instructions()): | |
prog = str(account_keys[ix['program_id_index']]) | |
if prog == constants.SYSTEM_PROGRAM_ID: | |
parsed = ix_parser.parse_system(account_keys, ix['accounts'], ix['data']) | |
if parsed['instruction'] == 'Transfer' and idx not in self.ix_processed: | |
yield parsed | |
self.ix_processed.add(idx) | |
if parsed['instruction'] == 'AdvanceNonceAccount' and idx not in self.ix_processed: | |
self.ix_processed.add(idx) | |
def process_token_transfers(self, details: TransactionRecordDetails): | |
record = details.record | |
account_keys = record.tx.compile_message().account_keys | |
toplevel = record.toplevel_instructions() | |
for idx, ix in enumerate(toplevel): | |
prog = str(account_keys[ix['program_id_index']]) | |
if prog != constants.SPL_TOKEN_ID: continue | |
parsed = ix_parser.parse_spl_token(account_keys, ix['accounts'], ix['data']) | |
if parsed['instruction'] == 'Transfer' and idx not in self.ix_processed: | |
yield parsed | |
self.ix_processed.add(idx) | |
if parsed['instruction'] == 'Authorize' and idx not in self.ix_processed: | |
yield parsed | |
self.ix_processed.add(idx) | |
def process_ata_transfers(self, details: TransactionRecordDetails): | |
record = details.record | |
account_keys = record.tx.compile_message().account_keys | |
toplevel = record.toplevel_instructions() | |
for idx, ix in enumerate(toplevel): | |
prog = str(account_keys[ix['program_id_index']]) | |
if prog != constants.SPL_ATA_ID: continue | |
parsed = ix_parser.parse_spl_ata(account_keys, ix['accounts'], ix['data']) | |
if parsed['instruction'] == 'Create': | |
self.ix_processed.add(idx) | |
yield str(parsed['account']), str(parsed['source']) | |
def handle_stake_activation(self, epoch): | |
epoch_timestamp = pd.NaT | |
for acc in self.account_tracker.assets.values(): | |
if acc.kind != 'stake' or acc.external: continue | |
if acc.state.deactivation_epoch == epoch and acc.state.activation_epoch == epoch: | |
continue | |
if acc.state.deactivation_epoch == epoch: | |
epoch_rewards = self.rewards.loc[epoch, acc.pubkey].iloc[0] | |
epoch_timestamp = epoch_rewards.timestamp | |
assert not pd.isna(epoch_timestamp) | |
entry = LedgerEntry.new_for_timestamp(self.tz, epoch_timestamp.to_pydatetime(), f'{acc.pubkey} | unstaked from {acc.state.validator}') | |
entry.comment=f'stake:{acc.pubkey}, validator:{acc.state.validator}, timestamp:{epoch_timestamp}, epoch:{epoch+1}' | |
# include last epoch rewards in unstake, so that income reporting shows from which stake the rewards came | |
amount = epoch_rewards.amount + acc.state.delegated_amount | |
entry.add_posting(self.stake_pubkey_delegated_name(acc.pubkey, epoch), -amount, 'SOL') | |
entry.add_posting(self.stake_pubkey_delegated_name(acc.pubkey, epoch + 1), amount, 'SOL') | |
yield entry | |
continue | |
if acc.state.activation_epoch == epoch: | |
epoch_timestamp = self.rewards.loc[epoch].timestamp.min() if pd.isna(epoch_timestamp) else epoch_timestamp | |
assert not pd.isna(epoch_timestamp) | |
entry = LedgerEntry.new_for_timestamp(self.tz, epoch_timestamp.to_pydatetime(), f'{acc.pubkey} | staked to {acc.state.validator}') | |
entry.comment=f'stake:{acc.pubkey}, validator:{acc.state.validator}, timestamp:{epoch_timestamp}, epoch:{epoch+1}' | |
entry.add_posting(self.stake_pubkey_delegated_name(acc.pubkey, epoch), -acc.state.delegated_amount, 'SOL') | |
entry.add_posting(self.stake_pubkey_delegated_name(acc.pubkey, epoch + 1), acc.state.delegated_amount, 'SOL') | |
yield entry | |
continue | |
def process_finished_epoch(self, epoch): | |
stakes = self.account_tracker.get_stake_pubkeys() | |
self.rewards = fetch_rewards_for_epoch(self.rpc, 'rewards.csv', self.rewards, epoch, stakes) | |
yield from self.handle_stake_activation(epoch) | |
epoch_rewards = self.rewards.loc[epoch].sort_values('effective_slot') | |
self.remaining_epoch_rewards += [reward for _, reward in epoch_rewards[~epoch_rewards['effective_slot'].isna()].iterrows()] | |
def process_rewards_until_slot(self, end_slot): | |
to_epoch = slot_to_epoch(end_slot) | |
if self.next_reward_epoch <= to_epoch: | |
for finished_epoch in range(max(0, self.next_reward_epoch - 1), to_epoch): | |
yield from self.process_finished_epoch(finished_epoch) | |
self.next_reward_epoch = to_epoch + 1 | |
while self.remaining_epoch_rewards and self.remaining_epoch_rewards[0]['effective_slot'] <= end_slot: | |
reward = self.remaining_epoch_rewards.pop(0) | |
if reward['timestamp'].timestamp() < self.begin: continue | |
if reward['timestamp'].timestamp() >= self.end: break | |
self.current_slot = reward['effective_slot'] | |
self.current_timestamp = reward['timestamp'].timestamp() | |
tracked = self.account_tracker.assets.get(reward['pubkey']) | |
if tracked is None or tracked.external: continue | |
entry = self.entry_for_inflation_reward(reward) | |
yield entry | |
def stake_pubkey_delegated_name(self, pk, epoch): | |
tracked = self.account_tracker.assets.get(pk, None) | |
return self.stake_account_delegated_name(tracked, epoch, pk=pk) | |
def stake_account_delegated_name(self, tracked, epoch, pk=None): | |
if pk is None: | |
pk = tracked.pubkey | |
if tracked is None or tracked.kind != 'stake' or tracked.external: | |
return f'raw:solana:{pk}' | |
if tracked.state.is_delegated(epoch): | |
return f'assets:solana:stake:{pk}:delegated:{tracked.state.validator}' | |
return f'assets:solana:stake:{pk}' | |
def handle_stake_op(self, details, entry: LedgerEntry, stake): | |
if not stake: return | |
if not any(self.account_tracker.is_own_signer(str(details.msg.account_keys[i])) for i in range(details.msg.header.num_required_signatures)): | |
return | |
action0 = stake[0] | |
if action0[0] == 'withdraw' and len(stake) == 1: | |
_, acc, _dest = action0 | |
entry.description = f'{acc} | withdraw from stake account' | |
entry.tags.add('kind:stake-op') | |
return True | |
if action0[0] == 'delegate' and len(stake) == 1: | |
_, tracked = action0 | |
tracked = self.account_tracker.assets.get(tracked.pubkey) | |
assert tracked is not None | |
entry.description = f'{tracked.pubkey} | initiate stake to {tracked.state.validator}' | |
entry.tags.add('kind:stake-op') | |
return True | |
if action0[0] == 'deactivate' and len(stake) == 1: | |
_, tracked = action0 | |
entry.description = f'{tracked.pubkey} | initiate unstake from {tracked.state.validator}' | |
entry.tags.add('kind:stake-op') | |
return True | |
if action0[0] == 'new' and len(stake) == 1: | |
entry.description = f'{action0[1]} | initialize stake account' | |
entry.tags.add('kind:stake-op') | |
return True | |
if action0[0] == 'merge' and len(stake) == 1: | |
_, src, dst = action0 | |
if src.external == dst.external: | |
entry.description = f'{dst.pubkey} | merge stake {src.pubkey}' | |
entry.tags.add('kind:stake-op') | |
return True | |
if action0[0] == 'split' and len(stake) == 1: | |
_, src, dst = action0 | |
if src.external == dst.external: | |
entry.description = f'{src.pubkey} | split stake to {dst.pubkey}' | |
entry.tags.add('kind:stake-op') | |
return True | |
if action0[0] == 'changed' and len(stake) == 1: | |
before = action0[1] | |
after = self.account_tracker.assets.get(before.pubkey) | |
if before and after and before.external == after.external: | |
entry.description = f'{before.pubkey} | update stake account authority' | |
entry.tags.add('kind:stake-op') | |
return True | |
def handle_transfer_op(self, details, entry: LedgerEntry, system, token, stake, atas): | |
system_src = set(str(parsed['source']) for parsed in system) | |
system_dst = set(str(parsed['destination']) for parsed in system) | |
self_funded_atas = {} | |
for pk, payer in atas: | |
if not self.account_tracker.is_own_signer(payer): | |
system_src.add(payer) | |
else: | |
self_funded_atas[pk] = payer | |
token_src = defaultdict(set) | |
token_dst = defaultdict(set) | |
signer = None | |
if len(details.record.tx.signatures) == 1: | |
signer = str(details.record.tx.fee_payer) | |
for idx, (pre, post) in enumerate(zip(details.token_balances[0], details.token_balances[-1])): | |
if pre and post and pre.mint == post.mint and pre.owner == post.owner: | |
if pre.amount == post.amount: continue | |
if pre.amount < post.amount: | |
if not post.owner: return | |
token_dst[pre.owner].add(str(details.msg.account_keys[idx])) | |
else: | |
owner = pre.owner or signer | |
if not owner: return | |
token_src[owner].add(str(details.msg.account_keys[idx])) | |
continue | |
if pre: | |
owner = pre.owner or signer | |
if not owner: return | |
token_src[owner].add(str(details.msg.account_keys[idx])) | |
if post: | |
if not post.owner: return | |
token_dst[post.owner].add(str(details.msg.account_keys[idx])) | |
stake_src = defaultdict(set) | |
stake_dst = defaultdict(set) | |
stake_transfers = [] | |
for op in stake: | |
if op[0] in { 'delegate', 'deactivate' }: return | |
if op[0] == 'new': | |
system_src = system_src | set(op[2]) | |
tracked = self.account_tracker.assets.get(op[1]) | |
if tracked and tracked.kind == 'stake': | |
if not tracked.state.owner: return | |
stake_dst[tracked.state.owner].add(tracked.pubkey) | |
if op[0] == 'changed': | |
before = op[1] | |
after = self.account_tracker.assets.get(before.pubkey) | |
if after is None: | |
if before.owner is None: return | |
stake_src[before.state.owner].add(before.pubkey) | |
continue | |
if before.state.owner != after.state.owner: | |
stake_src[before.state.owner].add(before.pubkey) | |
stake_dst[after.state.owner].add(before.pubkey) | |
stake_transfers += [(before, after)] | |
continue | |
if before.native_balance < after.native_balance: | |
stake_dst[before.state.owner].add(before.pubkey) | |
if before.native_balance > after.native_balance: | |
stake_src[before.state.owner].add(before.pubkey) | |
if op[0] == 'split': | |
_, src, dst = op | |
dst = self.account_tracker.assets.get(dst.pubkey) | |
if dst is None: | |
stake_src[src.state.owner].add(src.pubkey) | |
continue | |
if src.state.owner != dst.state.owner: | |
stake_src[src.state.owner].add(src.pubkey) | |
stake_dst[dst.state.owner].add(dst.pubkey) | |
srcs = system_src | set(token_src) | set(stake_src) | |
dsts = system_dst | set(token_dst) | set(stake_dst) | |
src_is_own = all(self.account_tracker.is_own_asset(s) for s in srcs) | |
dst_is_own = all(self.account_tracker.is_own_asset(d) for d in dsts) | |
src_is_public = all(self.account_tracker.signers.get(s, '') == 'public' for s in srcs) | |
dst_is_public = all(self.account_tracker.signers.get(d, '') == 'public' for d in dsts) | |
# if str(details.record.signature) == 'tSP38dp5s7qsJUzZDw5idFZdWV3ZBcjALFZmBj1PMgv78HJQwHfbcyXYeK92hAxnrFLLFREPhKEtFLwWxQrtmKP': | |
# import IPython | |
# IPython.embed() | |
if dst_is_own and src_is_own: | |
entry.description = 'transfer between own wallets' | |
entry.tags.add('kind:transfer') | |
return True | |
if src_is_own and dst_is_public: | |
entry.description = 'transfer to public wallet' | |
entry.tags.add('kind:transfer') | |
entry.tags.add('transfer:public') | |
all_dst_accs = system_dst | set( | |
acc | |
for d in [token_dst, stake_dst] | |
for accs in d.values() | |
for acc in accs | |
) | |
for posting in list(entry.postings): | |
if not posting.amount: continue | |
pk = posting.account.split(':')[-1] | |
if pk not in all_dst_accs or posting.account != f'raw:solana:{pk}': continue | |
assert posting.amount > 0, 'transfer destination posting must have positive amount' | |
tracked = self.account_tracker.get_public_account() | |
tracked.state.asset_delta.setdefault(posting.currency, 0) | |
tracked.state.asset_delta[posting.currency] += posting.amount | |
for before, after in stake_transfers: | |
assert before.owner in stake_src | |
assert after.owner in stake_dst | |
idx = [str(k) for k in details.msg.account_keys].index(before.pubkey) | |
# only need to handle this if no posting was generated | |
if details.record.meta['preBalances'][idx] != details.record.meta['postBalances'][idx]: | |
continue | |
amount = details.record.meta['preBalances'][idx] | |
tracked = self.account_tracker.get_public_account() | |
tracked.state.asset_delta.setdefault('SOL', 0) | |
tracked.state.asset_delta['SOL'] += amount | |
return True | |
if src_is_public and dst_is_own and srcs: | |
src = next(iter(srcs)) | |
entry.description = 'transfer from public wallet' | |
entry.tags.add('kind:transfer') | |
entry.tags.add('transfer:public') | |
mapping = self.transfer_mapping.get(src, {}) if len(srcs) == 1 else {} | |
all_src_accs = system_src | set( | |
acc | |
for d in [token_src, stake_src] | |
for accs in d.values() | |
for acc in accs | |
) | |
for posting in list(entry.postings): | |
if not posting.amount: continue | |
pk = posting.account.split(':')[-1] | |
if pk not in all_src_accs or posting.account != f'raw:solana:{pk}': continue | |
assert posting.amount < 0, 'transfer source posting must have positive amount' | |
tracked = self.account_tracker.get_public_account() | |
tracked.state.asset_delta.setdefault(posting.currency, 0) | |
tracked.state.asset_delta[posting.currency] -= -posting.amount | |
if pk == str(details.record.tx.fee_payer) and posting.currency == 'SOL': | |
tracked.state.asset_delta[posting.currency] += details.record.meta['fee'] | |
excess = tracked.state.asset_delta[posting.currency] | |
if excess < 0: | |
tracked.state.asset_delta[posting.currency] = 0 | |
if len(srcs) != 1: return | |
if not mapping.get('source'): | |
entry.tags.add(f'transfer-source:{src}') | |
print(f'warning: missing transfer source mapping for {src} for {excess} {posting.currency}', file=sys.stderr) | |
return | |
entry.add_posting(mapping['source'], excess, posting.currency) | |
for before, after in stake_transfers: | |
assert before.owner in srcs | |
idx = [str(k) for k in details.msg.account_keys].index(before.pubkey) | |
# only need to handle this if no posting was generated | |
if details.record.meta['preBalances'][idx] != details.record.meta['postBalances'][idx]: continue | |
amount = details.record.meta['preBalances'][idx] | |
tracked = self.account_tracker.get_public_account() | |
tracked.state.asset_detla.setdefault('SOL', 0) | |
tracked.state.asset_delta['SOL'] -= -amount | |
excess = tracked.state.asset_delta['SOL'] | |
if excess < 0: | |
tracked.state.asset_delta['SOL'] = 0 | |
if len(srcs) != 1: return | |
if not mapping.get('source'): | |
entry.tags.add(f'transfer-source:{src}') | |
print(f'warning: missing transfer source mapping for {src}', file=sys.stderr) | |
return | |
entry.add_posting(mapping['source'], -amount, 'SOL') | |
return True | |
src_external = not any(self.account_tracker.is_own_asset(s) for s in srcs) | |
dst_external = not any(self.account_tracker.is_own_asset(d) for d in dsts) | |
if src_external and dst_external: | |
entry.description = 'transfer between external wallets' | |
entry.tags.add('kind:transfer') | |
entry.tags.add('transfer:external') | |
all_asset_accs = system_src | system_dst | set( | |
acc | |
for d in [token_src, stake_src, token_dst, stake_src, stake_dst] | |
for accs in d.values() | |
for acc in accs | |
) | |
for posting in list(entry.postings): | |
if not posting.amount: continue | |
pk = posting.account.split(':')[-1] | |
if pk not in all_asset_accs or posting.account != f'raw:solana:{pk}': continue | |
entry.add_posting(f'raw:solana:{pk}', -posting.amount, posting.currency) | |
entry.add_posting(f'external:solana:{pk}', posting.amount, posting.currency) | |
return True | |
if len(srcs) == 1 and dst_is_own: | |
src = next(iter(srcs)) | |
mapping = self.transfer_mapping.get(src, {}) | |
if not mapping.get('source'): | |
entry.tags.add(f'transfer-source:{src}') | |
print(f'warning: missing transfer source mapping for {src}', file=sys.stderr) | |
return | |
entry.description = mapping['source_description'] | |
entry.tags.add('kind:transfer') | |
entry.tags.add('transfer:incoming') | |
to_rewrite = system_src | stake_src[src] | token_src[src] | |
for posting in list(entry.postings): | |
if not posting.amount: continue | |
pk = posting.account.split(':')[-1] | |
if pk not in to_rewrite or posting.account != f'raw:solana:{pk}': continue | |
assert posting.amount < 0, 'transfer source posting should have negative amount' | |
entry.add_posting(f'raw:solana:{pk}', -posting.amount, posting.currency) | |
entry.add_posting(f'{mapping["source"]}', posting.amount, posting.currency) | |
for before, after in stake_transfers: | |
assert before.owner == src | |
idx = [str(k) for k in details.msg.account_keys].index(before.pubkey) | |
# only need to handle this if no posting was generated | |
if details.record.meta['preBalances'][idx] != details.record.meta['postBalances'][idx]: continue | |
amount = details.record.meta['preBalances'][idx] | |
entry.add_posting('raw:solana:' + before.pubkey, amount, 'SOL') | |
entry.add_posting(mapping['source'], -amount, 'SOL') | |
return True | |
if len(dsts) == 1 and src_is_own: | |
dst = next(iter(dsts)) | |
mapping = self.transfer_mapping.get(dst, {}) | |
if not mapping.get('destination'): | |
entry.tags.add(f'transfer-destination:{dst}') | |
print(f'warning: missing transfer destination mapping for {dst}', file=sys.stderr) | |
return | |
entry.description = mapping['destination_description'] | |
entry.tags.add('kind:transfer') | |
entry.tags.add('transfer:outgoing') | |
to_rewrite = system_dst | stake_dst[dst] | token_dst[dst] | |
for posting in list(entry.postings): | |
if not posting.amount: continue | |
pk = posting.account.split(':')[-1] | |
if pk not in to_rewrite or posting.account != f'raw:solana:{pk}': continue | |
if pk in self_funded_atas and posting.currency == 'SOL': continue | |
assert posting.amount > 0, 'transfer destination posting should have positive amount' | |
entry.add_posting(f'raw:solana:{pk}', -posting.amount, posting.currency) | |
entry.add_posting(f'{mapping["destination"]}', posting.amount, posting.currency) | |
for pk, payer in self_funded_atas.items(): | |
entry.add_posting(f'raw:solana:{pk}', -constants.TOKEN_RENT_EXEMPT_AMOUNT, 'SOL') | |
entry.add_posting(f'expenses:donations:solana-ata-rent', constants.TOKEN_RENT_EXEMPT_AMOUNT, 'SOL') | |
for before, after in stake_transfers: | |
assert not before.external | |
idx = [str(k) for k in details.msg.account_keys].index(before.pubkey) | |
# only need to handle this if no posting was generated | |
if details.record.meta['preBalances'][idx] != details.record.meta['postBalances'][idx]: continue | |
amount = details.record.meta['preBalances'][idx] | |
entry.add_posting(f'raw:solana:{before.pubkey}', -amount, 'SOL') | |
entry.add_posting(mapping['destination'], amount, 'SOL') | |
return True | |
def handle_vote_withdraw_op(self, details: TransactionRecordDetails, entry: LedgerEntry, withdraws): | |
handled = True | |
total_amount_for_dest = defaultdict(int) | |
for withdraw in withdraws: | |
src = str(withdraw['account']) | |
dst = str(withdraw['destination']) | |
entry.tags.add('kind:stake-reward') | |
total_amount_for_dest[dst] += withdraw['amount'] | |
if not self.account_tracker.is_own_asset(withdraw['destination']): | |
entry.add_posting(f'raw:solana:{dst}', -withdraw['amount'], 'SOL') | |
entry.add_posting(f'external:solana:{dst}', withdraw['amount'], 'SOL') | |
entry.add_posting(f'raw:solana:{src}', withdraw['amount'], 'SOL') | |
entry.add_posting(f'external:solana:inflation', -withdraw['amount'], 'SOL') | |
continue | |
mapping = self.transfer_mapping.get(src, {}) | |
if not mapping.get('source'): | |
print(f'warning: missing transfer source mapping for {src}', file=sys.stderr) | |
handled = False | |
continue | |
entry.add_posting(f'raw:solana:{src}', withdraw['amount'], 'SOL') | |
entry.add_posting(f'income:misc:staking:solana:{src}', -withdraw['amount'], 'SOL') | |
for asset in self.account_tracker.assets.values(): | |
if asset.kind != 'stake' or asset.state is None: continue | |
if asset.state.validator is None or asset.state.validator != src: continue | |
entry.tags.add(f'stake:{asset.pubkey}') | |
for dst, amount in total_amount_for_dest.items(): | |
idx = [str(acc) for acc in details.msg.account_keys].index(dst) | |
delta = details.native_balances[-1][idx] - details.native_balances[0][idx] | |
if delta != amount: | |
rent_one_epoch_zero_size = 2439 | |
diff = delta - amount | |
assert diff < 0 | |
assert ( | |
details.native_balances[0][idx] == -diff or | |
(-diff) % rent_one_epoch_zero_size == 0 | |
) | |
if not self.account_tracker.is_own_asset(dst): | |
entry.add_posting(f'expenses:solana:fees:rent', diff, 'SOL') | |
entry.add_posting(f'external:solana:fees:rent', -diff, 'SOL') | |
entry.add_posting(f'raw:solana:{dst}', -diff, 'SOL') | |
entry.add_posting(f'external:solana:{dst}', diff, 'SOL') | |
if handled: | |
entry.description = f'collect staking rewards' | |
return handled | |
def process_token_ops(self, details: TransactionRecordDetails): | |
for idx, ix in enumerate(details.record.toplevel_instructions()): | |
prog = str(details.msg.account_keys[ix['program_id_index']]) | |
if prog == constants.SPL_ATA_ID: | |
parsed = ix_parser.parse_spl_ata(details.msg.account_keys, ix['accounts'], ix['data']) | |
if parsed['instruction'] == 'Create': | |
self.ix_processed.add(idx) | |
yield 'InitializeAccount' | |
continue | |
if prog == constants.SPL_TOKEN_ID: | |
parsed = ix_parser.parse_spl_token(details.msg.account_keys, ix['accounts'], ix['data']) | |
if parsed['instruction'] == 'InitializeAccount': | |
if not self.account_tracker.is_own_signer(str(parsed['owner'])): continue | |
self.ix_processed.add(idx) | |
yield 'InitializeAccount' | |
if parsed['instruction'] == 'CloseAccount': | |
if not self.account_tracker.is_own_signer(str(parsed['authority'])): continue | |
self.ix_processed.add(idx) | |
yield 'CloseAccount' | |
if parsed['instruction'] == 'SyncNative': | |
self.ix_processed.add(idx) | |
if parsed['instruction'] == 'Transfer': | |
source_idx = [str(k) for k in details.msg.account_keys].index(str(parsed['source'])) | |
dest_idx = [str(k) for k in details.msg.account_keys].index(str(parsed['source'])) | |
source = details.token_balances[ix['linear_idx']][source_idx] | |
dest = details.token_balances[ix['linear_idx']][dest_idx] | |
if source is None or dest is None or source.owner is None or dest.owner is None: continue | |
if not self.account_tracker.is_own_signer(source.owner): continue | |
if not self.account_tracker.is_own_signer(dest.owner): continue | |
self.ix_processed.add(idx) | |
yield 'Transfer' | |
continue | |
if prog == constants.SYSTEM_PROGRAM_ID: | |
parsed = ix_parser.parse_system(details.msg.account_keys, ix['accounts'], ix['data']) | |
if parsed['instruction'] == 'CreateAccount': | |
if not self.account_tracker.is_own_signer(str(parsed['source'])): continue | |
if str(parsed['owner']) != constants.SPL_TOKEN_ID: continue | |
self.ix_processed.add(idx) | |
if parsed['amount'] != constants.TOKEN_RENT_EXEMPT_AMOUNT: | |
yield 'Transfer' | |
else: | |
yield 'InitializeAccount' | |
if parsed['instruction'] == 'Transfer': | |
if not self.account_tracker.is_own_signer(str(parsed['source'])): continue | |
self.ix_processed.add(idx) | |
yield 'Transfer' | |
def process_loader_ops(self, details: TransactionRecordDetails, entry: LedgerEntry): | |
for idx, ix in enumerate(details.record.toplevel_instructions()): | |
prog = str(details.msg.account_keys[ix['program_id_index']]) | |
if prog == constants.BPF_LOADER_ID: | |
if not self.account_tracker.is_own_signer(str(details.record.tx.fee_payer)): continue | |
self.ix_processed.add(idx) | |
parsed = ix_parser.parse_loader(details.msg.account_keys, ix['accounts'], ix['data']) | |
yield { | |
'Finalize': 'deploy', | |
'Write': 'write', | |
}[parsed['instruction']] | |
if prog == constants.BPF_UPGRADEABLE_LOADER_ID: | |
if not self.account_tracker.is_own_signer(str(details.record.tx.fee_payer)): continue | |
self.ix_processed.add(idx) | |
parsed = ix_parser.parse_upgradeable_loader(range(len(details.msg.account_keys)), ix['accounts'], ix['data']) | |
if 'authority' in parsed and not self.account_tracker.is_own_signer(account_pubkey(details.msg.account_keys, parsed['authority'])): | |
continue | |
if parsed['instruction'] == 'DeployWithMaxDataLen': | |
prog_pk = account_pubkey(details.msg.account_keys, parsed['program']) | |
amount = details.native_balances[-1][parsed['program']] | |
assert amount is not None | |
entry.add_posting(f'expenses:solana:fees:rent-exempt', amount, 'SOL') | |
entry.add_posting(f'raw:solana:{prog_pk}', -amount, 'SOL') | |
progdata_pk = account_pubkey(details.msg.account_keys, parsed['programdata']) | |
amount = details.native_balances[-1][parsed['programdata']] | |
assert amount is not None | |
entry.add_posting(f'assets:solana:program-buffers:rent', amount, 'SOL') | |
entry.add_posting(f'raw:solana:{progdata_pk}', -amount, 'SOL') | |
buffer_pk = account_pubkey(details.msg.account_keys, parsed['buffer']) | |
amount = details.native_balances[0][parsed['buffer']] | |
assert amount is not None | |
entry.add_posting(f'assets:solana:program-buffers:rent', -amount, 'SOL') | |
entry.add_posting(f'raw:solana:{buffer_pk}', amount, 'SOL') | |
if parsed['instruction'] == 'InitializeBuffer': | |
account_pk = account_pubkey(details.msg.account_keys, parsed['account']) | |
amount = details.native_balances[-1][parsed['account']] | |
assert amount is not None | |
entry.add_posting(f'assets:solana:program-buffers:rent', amount, 'SOL') | |
entry.add_posting(f'raw:solana:{account_pk}', -amount, 'SOL') | |
if parsed['instruction'] == 'Close': | |
account_pk = account_pubkey(details.msg.account_keys, parsed['account']) | |
amount = details.native_balances[0][parsed['account']] | |
assert amount is not None | |
entry.add_posting(f'assets:solana:program-buffers:rent', -amount, 'SOL') | |
entry.add_posting(f'raw:solana:{account_pk}', amount, 'SOL') | |
yield { | |
'Write': 'write', | |
'DeployWithMaxDataLen': 'deploy', | |
'InitializeBuffer': 'initialize', | |
'Upgrade': 'upgrade', | |
'SetAuthority': 'set-authority', | |
'Close': 'close-program' if parsed.get('program') is not None else 'close-buffer', | |
}[parsed['instruction']] | |
if prog == constants.SYSTEM_PROGRAM_ID: | |
parsed = ix_parser.parse_system(details.msg.account_keys, ix['accounts'], ix['data']) | |
if parsed['instruction'] == 'CreateAccount': | |
if not self.account_tracker.is_own_signer(str(parsed['source'])): continue | |
if str(parsed['owner']) not in { constants.BPF_LOADER_ID, constants.BPF_UPGRADEABLE_LOADER_ID }: | |
continue | |
if str(parsed['owner']) == constants.BPF_LOADER_ID: | |
entry.add_posting(f'raw:solana:{parsed["destination"]}', -parsed['amount'], 'SOL') | |
if self.account_tracker.is_own_signer(str(parsed['source'])): | |
entry.add_posting(f'expenses:solana:fees:rent-exempt', parsed['amount'], 'SOL') | |
else: | |
entry.add_posting(f'external:solana:fees:rent-exempt', parsed['amount'], 'SOL') | |
self.ix_processed.add(idx) | |
yield 'initialize' | |
def alias(self, pk, new, raw=False): | |
if pk in self.aliases: return | |
self.aliases[pk] = new | |
if raw: | |
print(f"alias raw:solana:{pk} = {new}") | |
print(f"alias equity:solana:mint:{pk} = {new}") | |
print(f"alias external:solana:{pk} = {new}") | |
def process_swaps(self, details: TransactionRecordDetails, entry: LedgerEntry): | |
if not ({ constants.JUP_ID, constants.RAYDIUM_V4_ID } & { str(x) for x in details.msg.account_keys }): | |
return | |
for idx, ix in enumerate(details.record.toplevel_instructions()): | |
prog = str(details.msg.account_keys[ix['program_id_index']]) | |
if prog == constants.JUP_ID: | |
parsed = ix_parser.parse_jup(range(len(details.msg.account_keys)), ix['accounts'], ix['data']) | |
if parsed['instruction'] == 'set_token_ledger': | |
self.ix_processed.add(idx) | |
continue | |
swap_params = { | |
'token_swap': { | |
'name': 'orca', | |
'authority': 'user_transfer_authority', | |
'source': 'source', | |
'destination': 'destination', | |
'pool_id': 'swap', | |
'pool_accounts': ['swap_source', 'swap_destination'], | |
'pool_fee': 'pool_fee', | |
}, | |
'raydium_swap_v2': { | |
'name': 'raydium', | |
'authority': 'user_source_owner', | |
'source': 'user_source_token_account', | |
'destination': 'user_destination_token_account', | |
'pool_id': 'amm_id', | |
'pool_accounts': ['pool_coin_token_account', 'pool_pc_token_account'], | |
}, | |
'saber_exchange': { | |
'name': 'saber', | |
'authority': 'user_authority', | |
'source': 'input_user_account', | |
'destination': 'output_user_account', | |
'pool_id': 'swap', | |
'pool_accounts': ['input_token_account', 'output_token_account'], | |
'pool_fee': 'fees_token_account', | |
}, | |
'lifinity_token_swap': { | |
'name': 'lifinity', | |
'authority': 'user_transfer_authority', | |
'source': 'source_info', | |
'destination': 'destination_info', | |
'pool_id': 'amm', | |
'pool_accounts': ['swap_source', 'swap_destination'], | |
'pool_fee': 'fee_account', | |
}, | |
'crema_token_swap': { | |
'name': 'crema', | |
'authority': 'wallet_authority', | |
'source': 'user_source_token_account', | |
'destination': 'user_destination_token_account', | |
'pool_id': 'pool', | |
'pool_accounts': ['pool_source_token_account', 'pool_destination_token_account'], | |
} | |
} | |
if parsed['instruction'] in swap_params: | |
params = swap_params[parsed['instruction']] | |
user_authority = account_pubkey(details.msg.account_keys, parsed[params['authority']]) | |
if not self.account_tracker.is_own_signer(user_authority): continue | |
source_before = details.token_balances[ix['linear_idx']][parsed[params['source']]] | |
source_after = details.token_balances[ix['next_linear_idx']][parsed[params['source']]] | |
assert source_before and source_after and source_before.amount is not None and source_after.amount is not None | |
amount_in = source_before.amount - source_after.amount | |
destination_before = details.token_balances[ix['linear_idx']][parsed[params['destination']]] | |
destination_after = details.token_balances[ix['next_linear_idx']][parsed[params['destination']]] | |
assert destination_before and destination_after and destination_before.amount is not None and destination_after.amount is not None | |
amount_out = destination_after.amount - destination_before.amount | |
pool_accounts = [parsed[k] for k in params['pool_accounts']] | |
amm_pk = account_pubkey(details.msg.account_keys, parsed[params['pool_id']]) | |
for pool_acc in pool_accounts: | |
bal = details.token_balances[ix['linear_idx']][pool_acc] | |
assert bal is not None | |
pk = account_pubkey(details.msg.account_keys, pool_acc) | |
if bal.mint == source_before.mint: | |
entry.add_posting(f'raw:solana:{pk}', -amount_in, bal.mint) | |
entry.add_posting(f'equity:conversion:solana:{params["name"]}:{amm_pk}', amount_in, bal.mint) | |
else: | |
assert bal.mint == destination_before.mint | |
entry.add_posting(f'raw:solana:{pk}', amount_out, bal.mint) | |
entry.add_posting(f'equity:conversion:solana:{params["name"]}:{amm_pk}', -amount_out, bal.mint) | |
if 'pool_fee' in params: | |
fee_before = details.token_balances[ix['linear_idx']][parsed[params['pool_fee']]] | |
fee_after = details.token_balances[ix['next_linear_idx']][parsed[params['pool_fee']]] | |
pool_fee = account_pubkey(details.msg.account_keys, parsed[params['pool_fee']]) | |
assert fee_before and fee_after and fee_before.amount is not None and fee_after.amount is not None | |
fee = fee_after.amount - fee_before.amount | |
entry.add_posting(f'raw:solana:{pool_fee}', -fee, fee_before.mint) | |
entry.add_posting(f'external:solana:fees:{params["name"]}:{amm_pk}', fee, fee_before.mint) | |
self.ix_processed.add(idx) | |
yield params['name'], source_before.mint, destination_before.mint | |
continue | |
if prog == constants.RAYDIUM_V4_ID and ix['data'][0] in {9, 11}: # swap base in/out | |
accounts = ix['accounts'] | |
user_authority = account_pubkey(details.msg.account_keys, accounts[17]) | |
if not self.account_tracker.is_own_signer(user_authority): continue | |
source_before = details.token_balances[ix['linear_idx']][accounts[15]] | |
source_after = details.token_balances[ix['next_linear_idx']][accounts[15]] | |
assert source_before and source_after and source_before.amount is not None and source_after.amount is not None | |
amount_in = source_before.amount - source_after.amount | |
destination_before = details.token_balances[ix['linear_idx']][accounts[16]] | |
destination_after = details.token_balances[ix['next_linear_idx']][accounts[16]] | |
assert destination_before and destination_after and destination_before.amount is not None and destination_after.amount is not None | |
amount_out = destination_after.amount - destination_before.amount | |
pool_accounts = [accounts[i] for i in [5, 6]] | |
amm_pk = account_pubkey(details.msg.account_keys, ix['accounts'][1]) | |
for pool_acc in pool_accounts: | |
bal = details.token_balances[ix['linear_idx']][pool_acc] | |
assert bal is not None | |
pk = account_pubkey(details.msg.account_keys, pool_acc) | |
if bal.mint == source_before.mint: | |
entry.add_posting(f'raw:solana:{pk}', -amount_in, bal.mint) | |
entry.add_posting(f'equity:conversion:solana:raydium:{amm_pk}', amount_in, bal.mint) | |
else: | |
assert bal.mint == destination_before.mint | |
entry.add_posting(f'raw:solana:{pk}', amount_out, bal.mint) | |
entry.add_posting(f'equity:conversion:solana:raydium:{amm_pk}', -amount_out, bal.mint) | |
self.ix_processed.add(idx) | |
yield 'raydium', source_before.mint, destination_before.mint | |
def __call__(self, record: TransactionRecord): | |
entries = list(self.process_rewards_until_slot(record.txid.slot)) | |
self.current_slot = record.txid.slot | |
self.current_timestamp = record.timestamp.timestamp() | |
self.ix_processed = set() | |
all_toplevel_ixs = set(range(len(list(record.toplevel_instructions())))) | |
details = TransactionRecordDetails(self.account_tracker, record) | |
entry = self.entry_for_tx_generic(details) | |
assets_before = {} | |
for acc in details.msg.account_keys: | |
asset = self.account_tracker.assets.get(str(acc), None) | |
if asset is None: continue | |
assets_before[str(acc)] = asset.copy() | |
if record.signature in self.manual_entries: | |
manual_entry = self.manual_entries.pop(record.signature) | |
manual_entry.postings = entry.postings + manual_entry.postings | |
manual_entry.tags |= entry.tags | |
entries += [manual_entry] | |
else: | |
for _ in range(1): | |
# process "transfers" and staking operations | |
stake = list(self.process_stake(details, entry)) | |
if self.ix_processed == all_toplevel_ixs and self.handle_stake_op(details, entry, stake): break | |
system = list(self.process_system_transfers(details)) | |
token = list(self.process_token_transfers(details)) | |
ata = list(self.process_ata_transfers(details)) | |
for idx, ix in enumerate(record.toplevel_instructions()): | |
prog = str(details.msg.account_keys[ix['program_id_index']]) | |
if prog in { constants.SCAM_NOOP_PROGRAM_ID }: | |
self.ix_processed.add(idx) | |
if self.ix_processed == all_toplevel_ixs and self.handle_transfer_op(details, entry, system, token, stake, ata): break | |
self.ix_processed = set() | |
loader_ops = set(self.process_loader_ops(details, entry)) | |
if loader_ops == {'initialize', 'deploy'}: | |
loader_ops = {'deploy'} | |
if self.ix_processed == all_toplevel_ixs and len(loader_ops) == 1: | |
op = next(iter(loader_ops)) | |
entry.description = f'program deployment operation: {op}' | |
entry.tags.add('kind:loader-op') | |
entry.tags.add(f'loader:{op}') | |
break | |
self.ix_processed = set() | |
vote_withdraws = list(self.process_vote_withdraws(details, entry)) | |
if self.ix_processed == all_toplevel_ixs and self.handle_vote_withdraw_op(details, entry, vote_withdraws): | |
break | |
self.ix_processed = set() | |
token_ops = set(self.process_token_ops(details)) | |
if self.ix_processed == all_toplevel_ixs and token_ops and self.account_tracker.is_own_signer(record.tx.fee_payer): | |
entry.description = '' | |
for op in sorted(token_ops): | |
if entry.description: | |
entry.description += ', ' | |
entry.description += { | |
'InitializeAccount': 'initialize new account', | |
'CloseAccount': 'close own account', | |
'Transfer': 'transfer between own wallets', | |
}[op] | |
tag = { | |
'InitializeAccount': 'initialize', | |
'CloseAccount': 'close', | |
'Transfer': 'transfer', | |
}[op] | |
entry.tags.add(f'token-op:{tag}') | |
entry.description = f'{record.tx.fee_payer} | token operations: {entry.description}' | |
entry.tags.add('kind:token-op') | |
break | |
jup = list(self.process_swaps(details, entry)) | |
if self.ix_processed == all_toplevel_ixs: | |
entry.tags.add('kind:swap') | |
entry.description = f'{record.tx.fee_payer} | swap:' | |
for swap, mint_from, mint_to in jup: | |
entry.tags.add(f'swap:{swap}') | |
symbol_from = self.tokens[mint_from]['symbol'] | |
symbol_to = self.tokens[mint_to]['symbol'] | |
entry.description += f' {symbol_from} -> {symbol_to} ({swap}),' | |
entry.description = entry.description.rstrip(',') | |
entries += [entry] | |
self.account_tracker.tx_postprocess(details) | |
# generate offsetting posting for changed assets | |
epoch = slot_to_epoch(self.current_slot) | |
for acc in details.msg.account_keys: | |
before = assets_before.get(str(acc), None) | |
after = self.account_tracker.assets.get(str(acc), None) | |
if (before is None or before.external) and (after is None or after.external): continue | |
if before == after: continue | |
if before and before.kind == 'stake': | |
if before.state.is_delegated(epoch): | |
entries[-1].add_posting(self.stake_account_delegated_name(before, epoch), -before.state.delegated_amount, 'SOL') | |
entries[-1].add_posting(f'assets:solana:stake:{before.pubkey}', before.state.delegated_amount - before.native_balance, 'SOL') | |
entries[-1].add_posting(f'raw:solana:{before.pubkey}', before.native_balance, 'SOL') | |
else: | |
entries[-1].add_posting(f'assets:solana:stake:{before.pubkey}', -before.native_balance, 'SOL') | |
entries[-1].add_posting(f'raw:solana:{before.pubkey}', before.native_balance, 'SOL') | |
if after and after.kind == 'stake': | |
if after.state.is_delegated(epoch): | |
entries[-1].add_posting(self.stake_account_delegated_name(after, epoch), after.state.delegated_amount, 'SOL') | |
entries[-1].add_posting(f'assets:solana:stake:{after.pubkey}', -after.state.delegated_amount + after.native_balance, 'SOL') | |
entries[-1].add_posting(f'raw:solana:{after.pubkey}', -after.native_balance, 'SOL') | |
else: | |
if after.external: | |
entries[-1].add_posting(f'raw:solana:{after.pubkey}', after.native_balance, 'SOL') | |
else: | |
entries[-1].add_posting(f'assets:solana:stake:{after.pubkey}', after.native_balance, 'SOL') | |
entries[-1].add_posting(f'raw:solana:{after.pubkey}', -after.native_balance, 'SOL') | |
if before and before.kind == 'token' and not before.external: | |
native_wsol = 0 if before.state.mint != constants.WSOL_MINT_ID else before.state.amount | |
native_balance = before.native_balance - native_wsol | |
entries[-1].add_posting(f'assets:solana:wallet:{before.state.owner}:{before.pubkey}', -before.state.amount, before.state.mint) | |
entries[-1].add_posting(f'assets:solana:wallet:{before.state.owner}:{before.pubkey}', -native_balance, 'SOL') | |
entries[-1].add_posting(f'raw:solana:{before.pubkey}', before.state.amount, before.state.mint) | |
entries[-1].add_posting(f'raw:solana:{before.pubkey}', native_balance, 'SOL') | |
if after and after.kind == 'token' and not after.external: | |
native_wsol = 0 if after.state.mint != constants.WSOL_MINT_ID else after.state.amount | |
native_balance = after.native_balance - native_wsol | |
entries[-1].add_posting(f'assets:solana:wallet:{after.state.owner}:{after.pubkey}', after.state.amount, after.state.mint) | |
entries[-1].add_posting(f'assets:solana:wallet:{after.state.owner}:{after.pubkey}', native_balance, 'SOL') | |
entries[-1].add_posting(f'raw:solana:{after.pubkey}', -after.state.amount, after.state.mint) | |
entries[-1].add_posting(f'raw:solana:{after.pubkey}', -native_balance, 'SOL') | |
for idx, entry in enumerate(entries): | |
entry.merge_postings() | |
is_record_entry = idx == len(entries) - 1 | |
for posting in list(entry.postings): | |
if not posting.account.startswith('raw:solana:'): continue | |
suffix = posting.account[len('raw:solana:'):] | |
parts = suffix.split(':', 1) | |
pk = parts[0] | |
suffix = '' if len(parts) < 2 or not parts[1] else ':' + parts[1] | |
is_own_asset = self.account_tracker.is_own_asset(pk) | |
is_public_asset = self.account_tracker.signers.get(pk, '') == 'public' | |
if self.account_tracker.is_own_signer(pk): | |
posting.account = f'assets:solana:wallet:{pk}{suffix}' | |
continue | |
if is_public_asset: | |
posting.account = f'assets:solana:public:{pk}{suffix}' | |
continue | |
# if asset is not None and asset.kind == 'token' and not asset.external: | |
# assert asset.state.owner is not None | |
# posting.account = f'assets:solana:wallet:{asset.state.owner}:{pk}{suffix}' | |
entry.print(self.tokens, self.no_map_tokens) | |
print("") | |
def finalize(self): | |
self.process_rewards_until_slot(self.last_slot) | |
def main(): | |
assert __doc__ is not None | |
args = docopt(__doc__) | |
db = sqlite3.connect("tx.db") | |
tz = gettz(args['--timezone']) | |
rpc = SolRpc("https://api.mainnet-beta.solana.com") | |
rewards = load_rewards('rewards.csv') | |
select_condition = '1' | |
begin = 0 | |
end = float('inf') | |
if args['--year'] is not None: | |
begin = int(datetime(year=int(args['--year'], 10), month=1, day=1, tzinfo=tz).timestamp()) | |
end = datetime(year=int(args['--year'], 10) + 1, month=1, day=1, tzinfo=tz).timestamp() | |
select_condition = f'timestamp >= {begin} AND timestamp < {end}' | |
signers: pd.DataFrame = pd.read_csv(args['--signers'], index_col='pubkey') # type: ignore | |
account_tracker = AccountTracker(signers['owner'].to_dict()) | |
if args['--initial-assets'] is not None: | |
account_tracker.load_assets(args['--initial-assets']) | |
manual_entries = {} | |
with open(args['--manual-ledger']) as f: | |
for entry in parse_ledger_file(f): | |
signature = None | |
for tag in entry.tags: | |
if not tag.startswith('signature:'): continue | |
tag_sig = tag[len('signature:'):] | |
if signature is not None: | |
raise RuntimeError(f'duplicate signature tag for entry: {entry}') | |
signature = tag_sig | |
if signature is None: | |
raise RuntimeError(f'manual entry without TX signature: {entry}') | |
if signature in manual_entries: | |
raise RuntimeError(f'more than one manual entry for signature {signature}') | |
manual_entries[signature] = entry | |
processor = Processor(tz, rpc, account_tracker, rewards, begin, end, manual_entries, bool(args['--no-map-tokens'])) | |
have_error = False | |
if processor.no_map_tokens: | |
print('decimal-mark ,') | |
else: | |
print('decimal-mark .') | |
if args['--manual-aliases']: | |
aliases = pd.read_csv(args['--manual-aliases'], dtype={'pubkey': str, 'name': str, 'raw': bool}, keep_default_na=False) | |
for _, alias in aliases.iterrows(): | |
processor.alias(alias.pubkey, alias['name'], alias.raw) | |
for sig, timestamp, slot, index, data_str in db.execute( | |
f"select * from transactions where {select_condition} order by timestamp, slot, \"index\" asc" | |
): | |
data = json.loads(data_str) | |
tx = solana.transaction.Transaction.deserialize( | |
base64.b64decode(data["transaction"][0]) | |
) | |
timestamp = datetime.fromtimestamp(timestamp, tz=timezone.utc) | |
record = TransactionRecord( | |
signature=sig, | |
tx=tx, | |
meta=data["meta"], | |
timestamp=timestamp, | |
txid=TxId(slot, index), | |
) | |
try: | |
processor(record) | |
except Exception as e: | |
have_error = True | |
print("", file=sys.stderr) | |
print(f"error processing {sig}", file=sys.stderr) | |
traceback.print_exception(e) | |
processor.finalize() | |
if args['--track-events']: | |
pd.DataFrame([event.to_dict() for event in account_tracker.events]).to_csv(args['--track-events'], index=False) | |
if args['--final-assets']: | |
account_tracker.save_assets(args['--final-assets']) | |
if have_error or account_tracker.have_error: | |
sys.exit(1) | |
if __name__ == "__main__": | |
main() |
This file has been truncated, but you can view the full file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "Solana Token List", | |
"logoURI": "https://cdn.jsdelivr.net/gh/trustwallet/assets@master/blockchains/solana/info/logo.png", | |
"keywords": [ | |
"solana", | |
"spl" | |
], | |
"tags": { | |
"stablecoin": { | |
"name": "stablecoin", | |
"description": "Tokens that are fixed to an external asset, e.g. the US dollar" | |
}, | |
"ethereum": { | |
"name": "ethereum", | |
"description": "Asset bridged from ethereum" | |
}, | |
"lp-token": { | |
"name": "lp-token", | |
"description": "Asset representing liquidity provider token" | |
}, | |
"wrapped-sollet": { | |
"name": "wrapped-sollet", | |
"description": "Asset wrapped using sollet bridge" | |
}, | |
"wrapped": { | |
"name": "wrapped", | |
"description": "Asset wrapped using wormhole bridge" | |
}, | |
"leveraged": { | |
"name": "leveraged", | |
"description": "Leveraged asset" | |
}, | |
"bull": { | |
"name": "bull", | |
"description": "Leveraged Bull asset" | |
}, | |
"bear": { | |
"name": "bear", | |
"description": "Leveraged Bear asset" | |
}, | |
"nft": { | |
"name": "nft", | |
"description": "Non-fungible token" | |
}, | |
"security-token": { | |
"name": "security-token", | |
"description": "Tokens that are used to gain access to an electronically restricted resource" | |
}, | |
"utility-token": { | |
"name": "utility-token", | |
"description": "Tokens that are designed to be spent within a certain blockchain ecosystem e.g. most of the SPL-Tokens" | |
}, | |
"tokenized-stock": { | |
"name": "tokenized-stock", | |
"description": "Tokenized stocks are tokenized derivatives that represent traditional securities, particularly shares in publicly firms traded on regulated exchanges" | |
} | |
}, | |
"timestamp": "2021-03-03T19:57:21+0000", | |
"tokens": [ | |
{ | |
"chainId": 101, | |
"address": "3SghkPdBSrpF9bzdAy5LwR4nGgFbqNcC6ZSq8vtZdj91", | |
"symbol": "EV1", | |
"name": "EveryOne Coin", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3SghkPdBSrpF9bzdAy5LwR4nGgFbqNcC6ZSq8vtZdj91/logo.png", | |
"tags": [ | |
"currency" | |
], | |
"extensions": { | |
"facebook": "https://facebook.com/everyonecoin", | |
"twitter": "https://twitter.com/everyonecoin", | |
"website": "https://everyonecoin.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "NGK3iHqqQkyRZUj4uhJDQqEyKKcZ7mdawWpqwMffM3s", | |
"symbol": "YAKU", | |
"name": "Yaku", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EK58dp4mxsKwwuySWQW826i3fwcvUK69jPph22VUcd2H/logo.png", | |
"tags": [ | |
"utility-token" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "CbNYA9n3927uXUukee2Hf4tm3xxkffJPPZvGazc2EAH1", | |
"symbol": "agEUR", | |
"name": "agEUR (Portal)", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CbNYA9n3927uXUukee2Hf4tm3xxkffJPPZvGazc2EAH1/logo.png", | |
"tags": [ | |
"ethereum", | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8", | |
"assetContract": "https://etherscan.io/address/0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8", | |
"bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", | |
"coingeckoId": "ageur", | |
"description": "Angle is the first decentralized, capital efficient and over-collateralized stablecoin protocol", | |
"discord": "https://discord.gg/z3kCpTaKMh", | |
"twitter": "https://twitter.com/AngleProtocol", | |
"website": "https://www.angle.money" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "31GpPxe1SW8pn7GXimM73paD8PZyCsmVSGTLkwUAJvZ8", | |
"symbol": "ANGLE", | |
"name": "ANGLE (Portal)", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/31GpPxe1SW8pn7GXimM73paD8PZyCsmVSGTLkwUAJvZ8/logo.svg", | |
"tags": [ | |
"ethereum", | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x31429d1856ad1377a8a0079410b297e1a9e214c2", | |
"assetContract": "https://etherscan.io/address/0x31429d1856ad1377a8a0079410b297e1a9e214c2", | |
"bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", | |
"coingeckoId": "angle-protocol", | |
"description": "Angle is the first decentralized, capital efficient and over-collateralized stablecoin protocol", | |
"discord": "https://discord.gg/z3kCpTaKMh", | |
"twitter": "https://twitter.com/AngleProtocol", | |
"website": "https://www.angle.money" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "G6nZYEvhwFxxnp1KZr1v9igXtipuB5zL6oDGNMRZqF3q", | |
"symbol": "BAD", | |
"name": "EA Bad", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G6nZYEvhwFxxnp1KZr1v9igXtipuB5zL6oDGNMRZqF3q/EABadlogo.PNG", | |
"tags": [ | |
"utility-token", | |
"community-token", | |
"meme-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/EABadtoken" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Fm9rHUTF5v3hwMLbStjZXqNBBoZyGriQaFM6sTFz3K8A", | |
"symbol": "MBS", | |
"name": "MonkeyBucks", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fm9rHUTF5v3hwMLbStjZXqNBBoZyGriQaFM6sTFz3K8A/logo.png", | |
"tags": [ | |
"utility-token", | |
"game-token", | |
"game-currency", | |
"GameFi", | |
"Gaming" | |
], | |
"extensions": { | |
"coingeckoId": "monkeyball", | |
"description": "MonkeyLeague is the next-gen esports metaverse empowering players to create, play, compete, and earn.", | |
"discord": "https://discord.gg/monkeyleague", | |
"facebook": "https://www.facebook.com/TheMonkeyLeague", | |
"instagram": "https://www.instagram.com/themonkeyleague/", | |
"medium": "https://medium.com/@MonkeyLeague", | |
"reddit": "https://www.reddit.com/r/MonkeyBallGame", | |
"telegram": "https://t.me/MonkeyLeague_Official", | |
"twitter": "https://twitter.com/TheMonkeyLeague", | |
"website": "https://www.monkeyleague.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FCuoMii64H5Ee4eVWBjP18WTFS8iLUJmGi16Qti1xFQ2", | |
"symbol": "EDB", | |
"name": "Emerald Block", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/SBPToken/token-list/main/assets/mainnet/FCuoMii64H5Ee4eVWBjP18WTFS8iLUJmGi16Qti1xFQ2/logo.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/kzPBdWtbrK", | |
"instagram": "https://instagram.com/solblockpunks", | |
"twitter": "https://twitter.com/solblockpunks", | |
"website": "https://solblockpunks.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HfYFjMKNZygfMC8LsQ8LtpPsPxEJoXJx4M6tqi75Hajo", | |
"symbol": "CWAR", | |
"name": "Cryowar Token", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HfYFjMKNZygfMC8LsQ8LtpPsPxEJoXJx4M6tqi75Hajo/logo.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.com/invite/cryowar", | |
"telegram": "https://t.me/cryowar", | |
"twitter": "https://twitter.com/CryowarDevs", | |
"website": "https://cryowar.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BqRtfrNpvRAW3KW319hvhPoTu76wKU2LTdXJyG9CyDze", | |
"symbol": "ECHO", | |
"name": "EchoDao", | |
"decimals": 9, | |
"logoURI": "https://i.imgur.com/HnnxQND.png", | |
"tags": [ | |
"utility-token", | |
"DAO-fork" | |
], | |
"extensions": { | |
"discord": "https://discord.com/invite/NtvVPs4WnY", | |
"serumV3Usdc": "8bjQ8XvzrDxKxHhTccpLkqGLbBrCAAPuv6KHrgN95nDW", | |
"twitter": "https://twitter.com/echodao_sol", | |
"website": "https://echodao.xyz" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HCXXtXPasqcF4BVsrPQPfHMQPUofoCbDbjsTUANFSHDR", | |
"symbol": "MONKE", | |
"name": "MONKE TOKEN", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HCXXtXPasqcF4BVsrPQPfHMQPUofoCbDbjsTUANFSHDR/logo.png", | |
"tags": [ | |
"community-token", | |
"meme-token" | |
], | |
"extensions": { | |
"website": "https://monketoken.xyz/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7gfwZiMD3B6hJWxejr4E3PdsfyVndfuGuk97LfDhJNNh", | |
"symbol": "DIBU", | |
"name": "DickButt", | |
"decimals": 9, | |
"logoURI": "https://cdn.jsdelivr.net/gh/xRoBBeRT/DickButtLogo/DickButt.png", | |
"tags": [ | |
"community-token", | |
"meme-token" | |
], | |
"extensions": { | |
"discord": "https://discord.com/invite/solanadickbutt", | |
"twitter": "https://twitter.com/SolanaDickButt", | |
"website": "https://solanadickbutt.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6JdcMdhqgCtcP4U9tieRqmKLhPLxRMLC67QfmdXAJBvZ", | |
"symbol": "KITTY", | |
"name": "KITTY SOLANA", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6JdcMdhqgCtcP4U9tieRqmKLhPLxRMLC67QfmdXAJBvZ/logo.png", | |
"tags": [ | |
"meme-token" | |
], | |
"extensions": { | |
"coingeckoId": "kitty-solana", | |
"coinmarketcap": "https://coinmarketcap.com/currencies/kitty-solana/", | |
"discord": "https://discord.gg/XaRfbtsscz", | |
"serumV3Usdc": "8bjQ8XvzrDxKxHhTccpLkqGLbBrCAAPuv6KHrgN95nDW", | |
"twitter": "https://twitter.com/kitty_solana", | |
"website": "https://kittysolana.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HDiA4quoMibAGeJQzvxajp3Z9cvnkNng99oVrnuNj6px", | |
"symbol": "KSAMO", | |
"name": "KING SAMO", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HDiA4quoMibAGeJQzvxajp3Z9cvnkNng99oVrnuNj6px/logo.png", | |
"tags": [ | |
"meme-token" | |
], | |
"extensions": { | |
"discord": "https://discord.com/invite/R8QhkNHn", | |
"telegram": "https://t.me/TokenKingSamo", | |
"twitter": "https://twitter.com/kingsamocoin", | |
"website": "https://kingsamo.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "73YQDsoPB3t5n5GqX53tKrwJK1n6HCZ935MEbo2gEYU5", | |
"symbol": "KAJAME", | |
"name": "Kajame", | |
"decimals": 4, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/73YQDsoPB3t5n5GqX53tKrwJK1n6HCZ935MEbo2gEYU5/logo.png", | |
"tags": [ | |
"meme-token", | |
"social-token", | |
"community-token" | |
], | |
"extensions": { | |
"blog": "https://blog.me-idea.in.th", | |
"website": "https://kajame.xyz" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DJKX1cX2SPPaTdYBeuriUeQUUEpi2UGBGGPQthNMrgaa", | |
"symbol": "MONKE", | |
"name": "MONKE TOKEN", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DJKX1cX2SPPaTdYBeuriUeQUUEpi2UGBGGPQthNMrgaa/logo.png", | |
"tags": [ | |
"community-token", | |
"meme-token" | |
], | |
"extensions": { | |
"website": "https://monketoken.xyz/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6TgvYd7eApfcZ7K5Mur7MaUQ2xT7THB4cLHWuMkQdU5Z", | |
"symbol": "OTR", | |
"name": "Otter Finance", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6TgvYd7eApfcZ7K5Mur7MaUQ2xT7THB4cLHWuMkQdU5Z.png", | |
"tags": [ | |
"meme-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/chfgc9wxnw", | |
"serumV3Usdc": "4k4WXdmrWjCG71E4pxMs6SQRRB5cypGNYatKb2iMnqN4", | |
"twitter": "https://twitter.com/otter_finance", | |
"website": "http://www.otterfinance.site" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "382HfaEjcUNhwoGbYmL58DVX8GUvjrXiTPchCWKjchWA", | |
"symbol": "SPLN", | |
"name": "SHEEPLANA", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/382HfaEjcUNhwoGbYmL58DVX8GUvjrXiTPchCWKjchWA.png", | |
"tags": [ | |
"meme-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/zV9dyHfxGb", | |
"twitter": "https://twitter.com/sheeplana_coin", | |
"website": "https://www.sheeplana.online/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EH49ziLeKhJtzUzdys5238pSKpvrgJvmi3EStrZ9QaY7", | |
"symbol": "RAC", | |
"name": "Rainc", | |
"decimals": 4, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EH49ziLeKhJtzUzdys5238pSKpvrgJvmi3EStrZ9QaY7/logo.png", | |
"tags": [ | |
"meme-token" | |
], | |
"extensions": { | |
"discord": "https://discord.io/rainc", | |
"serumV3Usdc": "21eq7jsx59jPFo2gt4npreKu1voURzcjyPniBdgupuQC", | |
"twitter": "https://twitter.com/raincproject", | |
"website": "https://www.raincsol.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2mDJPcvv7vigZo9ZPxhHLpKQSixCkbohVY35eX6NkN6m", | |
"symbol": "TBK", | |
"name": "TokenBook", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2mDJPcvv7vigZo9ZPxhHLpKQSixCkbohVY35eX6NkN6m/logo.png", | |
"tags": [ | |
"meme-token" | |
], | |
"extensions": { | |
"serumV3Usdc": "DoL5SXaax9LwQM9JfqFBymiUfSxH9A9cwPugPuHvNTDM", | |
"twitter": "https://twitter.com/TokenBook_tbk" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DcvJP16Cw5oqTbtHmpJ4JGXaqBvV5m6eMZj5rGsFLpwU", | |
"symbol": "BOOGI", | |
"name": "BABY OOGI", | |
"decimals": 4, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DcvJP16Cw5oqTbtHmpJ4JGXaqBvV5m6eMZj5rGsFLpwU/logo.png", | |
"tags": [ | |
"community-token", | |
"meme-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/babyoogi_", | |
"website": "https://babyoogi.xyz/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "48iGP5MUTZ8DCfDvZ9dpgKySP2iekQ3zPKZM8AhDjEmw", | |
"symbol": "VIRAL", | |
"name": "Viraverse", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/48iGP5MUTZ8DCfDvZ9dpgKySP2iekQ3zPKZM8AhDjEmw/logo.png", | |
"tags": [ | |
"stake-pool-token", | |
"utility-token", | |
"security-token", | |
"community-token", | |
"viraverse" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/EwVdMYvEgV", | |
"telegram": "https://t.me/viraverseio", | |
"twitter": "https://twitter.com/viraverseio", | |
"website": "https://viraverse.io" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2WnVfjtW9QttRwqxn3RPnHBFHMR3cyA5Ca3zug41Q9Xb", | |
"symbol": "HNI", | |
"name": "Golden Techie Hannibal Token", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2WnVfjtW9QttRwqxn3RPnHBFHMR3cyA5Ca3zug41Q9Xb/logo.png", | |
"tags": [ | |
"social-token" | |
], | |
"extensions": { | |
"website": "https://crpanadasoft.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CgbJxXyaHeU8VsquBpySuFXA94b6LWXxioZ28wRr8fs9", | |
"symbol": "VINU", | |
"name": "Viral Inu", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CgbJxXyaHeU8VsquBpySuFXA94b6LWXxioZ28wRr8fs9/logo.png", | |
"tags": [ | |
"stake-pool-token", | |
"utility-token", | |
"meme-token", | |
"community-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/zpJ7zADRZ5", | |
"telegram": "https://t.me/viralinu", | |
"twitter": "https://twitter.com/ViralInu", | |
"website": "https://viralinu.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6bLp99VoqKU1C3Qp6VTNvSoCoc78jMGxPkGSSopq8wHB", | |
"symbol": "Paws", | |
"name": "Solana Paws", | |
"decimals": 2, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6bLp99VoqKU1C3Qp6VTNvSoCoc78jMGxPkGSSopq8wHB/logo.png", | |
"tags": [ | |
"meme-token", | |
"community", | |
"doge", | |
"Paws" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/sVP35wfPhX", | |
"twitter": "https://twitter.com/Sol_Paws", | |
"website": "https://www.solanapaws.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GGupQCMnyEmHKcqFu72qCTm6yEYpVyhouY9dSAMEXLsC", | |
"symbol": "DOGEC", | |
"name": "Dogecoin Cash", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GGupQCMnyEmHKcqFu72qCTm6yEYpVyhouY9dSAMEXLsC/logo.png", | |
"tags": [ | |
"community-token", | |
"meme-token", | |
"doge", | |
"dogecoin" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/dogec_cash", | |
"website": "https://www.dogecoincash.info" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2d9LcdAQCnxPHSca6frjQzYKapNzB7caSuLKpeWBctvT", | |
"symbol": "Taboo", | |
"name": "TABOO TOKEN", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2d9LcdAQCnxPHSca6frjQzYKapNzB7caSuLKpeWBctvT/logo.png", | |
"tags": [ | |
"community-token", | |
"Taboo-token", | |
"Taboo", | |
"Videos" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "CrhUSH7FDwB37BYvPsVnVbsGVeE81biBzfkD4A4fyJMv", | |
"symbol": "Vikings", | |
"name": "Viking Legend", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CrhUSH7FDwB37BYvPsVnVbsGVeE81biBzfkD4A4fyJMv/logo.png", | |
"tags": [ | |
"community-token", | |
"viking-token", | |
"floki", | |
"nfts" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "3BYQt5MtdUSDkGwPa7F5pxFNx6csyUK2zAqNgoAsQ96h", | |
"symbol": "VIKINGxFLOKI", | |
"name": "VIKINGxFLOKI", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3BYQt5MtdUSDkGwPa7F5pxFNx6csyUK2zAqNgoAsQ96h/logo.png", | |
"tags": [ | |
"community-token", | |
"viking-token", | |
"viking-floki", | |
"nfts" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "zWxLppNEHinqYbQffzp2T5yNXUzyQUsHZ39nxjTqk6F", | |
"symbol": "METAS", | |
"name": "Meta Syndrome", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/zWxLppNEHinqYbQffzp2T5yNXUzyQUsHZ39nxjTqk6F/logo.png", | |
"tags": [ | |
"community-token", | |
"meta-token", | |
"meta-mark", | |
"nfts" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "8sMa1Jfcpt2eSkKDtcd6rurX27gqxkrEvXn5jHt3suGB", | |
"symbol": "DGMOON", | |
"name": "DogeMoonxSOL", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8sMa1Jfcpt2eSkKDtcd6rurX27gqxkrEvXn5jHt3suGB/logo.png", | |
"tags": [ | |
"community-token", | |
"doge-token", | |
"doge", | |
"nfts" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "8g9kLFgtHF4kMVjGbpnPNUU8QbxMHpLZTKhAJyvwr9on", | |
"symbol": "MCAT", | |
"name": "Meta Cat", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8g9kLFgtHF4kMVjGbpnPNUU8QbxMHpLZTKhAJyvwr9on/logo.png", | |
"tags": [ | |
"community-token", | |
"cat-token", | |
"cat", | |
"nfts", | |
"meta", | |
"Facebook" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "H5TA9LexsmmvLM49zdEkbaPCcHJed8TTFtRqny81tEaK", | |
"symbol": "xVideos", | |
"name": "xVideo Token", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H5TA9LexsmmvLM49zdEkbaPCcHJed8TTFtRqny81tEaK/logo.png", | |
"tags": [ | |
"community-token", | |
"platform", | |
"videos", | |
"payment" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "roCKojKezC7HhPxph5qb4UBasvmZJWgegCF57PvaV2f", | |
"symbol": "ROCK", | |
"name": "RockDeFi", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/roCKojKezC7HhPxph5qb4UBasvmZJWgegCF57PvaV2f/logo.png", | |
"tags": [ | |
"stablecoin", | |
"asset" | |
], | |
"extensions": { | |
"website": "https://rockdefi.app/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FeGm2DB4EWHm2LS8ABnRatzARDRYFyUPkLsSJkJwBuSu", | |
"symbol": "FKM", | |
"name": "FLOKIMUSK (Portal)", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeGm2DB4EWHm2LS8ABnRatzARDRYFyUPkLsSJkJwBuSu/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0xc999f49bb48179d5df09402a4a7a4034bc039f81", | |
"assetContract": "https://bscscan.com/address/0xc999f49bb48179d5df09402a4a7a4034bc039f81", | |
"bridgeContract": "https://bscscan.com/address/0xB6F6D86a8f9879A9c87f643768d9efc38c1Da6E7", | |
"twitter": "https://twitter.com/flokimuskmeme", | |
"website": "https://flokimuskweb.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "usdrQqxAGgWsBRzzcckAi9ZAzHp19rFCNn87p4Q8Eir", | |
"symbol": "USDR", | |
"name": "RockDeFi Stablecoin", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/usdrQqxAGgWsBRzzcckAi9ZAzHp19rFCNn87p4Q8Eir/logo.png", | |
"tags": [ | |
"stablecoin", | |
"asset" | |
], | |
"extensions": { | |
"website": "https://rockdefi.app/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9cU8yLEAidMNVGEq6QHPe2ktN7SV2qqvLABth8YiSwYx", | |
"symbol": "PARM", | |
"name": "Parm Coin", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9cU8yLEAidMNVGEq6QHPe2ktN7SV2qqvLABth8YiSwYx/logo.png", | |
"tags": [ | |
"community-token", | |
"meme-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/theeggplantNFT", | |
"website": "https://www.eggplantparty.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "A9Nc6Yo9YGKsaeAb2nsQFSQpLcdotGqjEJmEQFzZeeqX", | |
"symbol": "GM", | |
"name": "Good Morning Coin", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A9Nc6Yo9YGKsaeAb2nsQFSQpLcdotGqjEJmEQFzZeeqX/logo.png", | |
"tags": [ | |
"meme-token", | |
"community-token" | |
], | |
"extensions": { | |
"website": "https://goodmorning.money" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AMp8Jo18ZjK2tuQGfjKAkkWnVP4NWX5sav4NJH6pXF2D", | |
"symbol": "ASTRA", | |
"name": "AstraPad", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AMp8Jo18ZjK2tuQGfjKAkkWnVP4NWX5sav4NJH6pXF2D/logo.png", | |
"tags": [ | |
"Launchpad", | |
"NFT" | |
], | |
"extensions": { | |
"coingeckoId": "astrapad", | |
"telegram": "https://t.me/AstraPadANN", | |
"twitter": "https://twitter.com/astrapadio", | |
"website": "https://astrapad.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "45u9AsJtN2KkYpH6GCXtwuoDF7HwgMjTQ84xfH6SJYQy", | |
"symbol": "PUT", | |
"name": "Pedals Up Token", | |
"decimals": 10, | |
"logoURI": "https://cdn.jsdelivr.net/gh/devdutt6/PedalsUpToken/Pedals/pedals.png", | |
"tags": [ | |
"personal", | |
"development" | |
], | |
"extensions": { | |
"website": "https://pedalsup.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2kzNeq9Yc6rghrgSfat3cvBkmK9JiePaLv7B4r1YKGDX", | |
"symbol": "FUTT", | |
"name": "Futtbucks", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2kzNeq9Yc6rghrgSfat3cvBkmK9JiePaLv7B4r1YKGDX/logo.png", | |
"tags": [ | |
"community-token", | |
"currency" | |
], | |
"extensions": { | |
"instagram": "https://www.instagram.com/futt.bucks/", | |
"website": "https://futtbucks.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DE3Tv7eWpXGanVQC9RW1P9RG6AHWtC8VgYS9hRRVcF93", | |
"symbol": "FUTT", | |
"name": "Futtbucks", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2kzNeq9Yc6rghrgSfat3cvBkmK9JiePaLv7B4r1YKGDX/logo.png", | |
"tags": [ | |
"community-token", | |
"currency" | |
], | |
"extensions": { | |
"instagram": "https://www.instagram.com/futt.bucks/", | |
"website": "https://futtbucks.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6SKogZxCWY9jKsKPMT3ChJUhQxAEeB6NjVidXQK6TEdW", | |
"symbol": "GDoge", | |
"name": "Golden Doge Solana", | |
"decimals": 1, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6SKogZxCWY9jKsKPMT3ChJUhQxAEeB6NjVidXQK6TEdW/Logo.png", | |
"tags": [ | |
"community-token", | |
"meme-token", | |
"doge", | |
"dogecoin" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/GoldSolDoge", | |
"website": "https://http://www.goldsoldoge.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FaiPGacTM7YBmacumbg4ZnDx7sKtGcG3LkcVoqfddEA7", | |
"symbol": "BULL", | |
"name": "theBULL Coin", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FaiPGacTM7YBmacumbg4ZnDx7sKtGcG3LkcVoqfddEA7/logo.png", | |
"tags": [ | |
"community-token", | |
"meme-token", | |
"NFT" | |
], | |
"extensions": { | |
"discord": "https://discord.com/invite/B6sd88UVmD", | |
"twitter": "https://twitter.com/theBULL_NFT" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2XSuy8RSESbtYRBbVHxGWuoikn3B6iXKVKzN4i3owTCf", | |
"symbol": "BSAMO", | |
"name": "BUFF SAMO", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2XSuy8RSESbtYRBbVHxGWuoikn3B6iXKVKzN4i3owTCf/logo.png", | |
"tags": [ | |
"community-token" | |
], | |
"extensions": { | |
"coingeckoId": "buff-samo", | |
"coinmarketcap": "https://coinmarketcap.com/currencies/buff-samo/", | |
"discord": "https://discord.link/BuffSamo", | |
"twitter": "https://twitter.com/buffsamo", | |
"website": "http://buffsamo.tech/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DNmxHPgeVLSofyAriirHybKoNx1baM2ufiHKs1W7YyPc", | |
"symbol": "RPN", | |
"name": "RoyalPangolins", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DNmxHPgeVLSofyAriirHybKoNx1baM2ufiHKs1W7YyPc/logo.png", | |
"extensions": { | |
"discord": "https://discord.gg/XvjxsRzK", | |
"twitter": "https://twitter.com/RoyalPangolins", | |
"website": "https://royalpangolins.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FdnEZ71hjabwo6Eo6XHGyK4QrE1tVQtBoTGMmgWYAuDn", | |
"symbol": "GDoge", | |
"name": "Gold Doge Solana", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FdnEZ71hjabwo6Eo6XHGyK4QrE1tVQtBoTGMmgWYAuDn/logo.png", | |
"tags": [ | |
"community-token", | |
"meme-token", | |
"doge", | |
"dogecoin" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/GoldSolDoge", | |
"website": "https://http://www.goldsoldoge.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4eG64sB6SpvXve4WoRAN956UFKoETLP4JDyMU51TMdep", | |
"symbol": "WZWT", | |
"name": "WIZ WIT Token", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4eG64sB6SpvXve4WoRAN956UFKoETLP4JDyMU51TMdep/logo.png", | |
"tags": [ | |
"meme-token" | |
], | |
"extensions": { | |
"description": "The world's 1st cheesesteak-based currency, brought to you by the City of Brotherly Love (Philly!!!).", | |
"discord": "https://discord.gg/ptYZPtxZf4", | |
"twitter": "https://twitter.com/phillytoken", | |
"website": "https://phillytoken.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Bjgh4YsLdicr8WArz9ftdSmpWNcQjsZ9KV3w9fkjiLG", | |
"symbol": "SOLRC", | |
"name": "SolRaca", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/Solraca/token-list/main/assets/mainnet/Bjgh4YsLdicr8WArz9ftdSmpWNcQjsZ9KV3w9fkjiLG/solraca.png", | |
"tags": [ | |
"meme-token" | |
], | |
"extensions": { | |
"telegram": "https://t.me/solracaofficial" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "45HfvXJHY9msY2i4EmUpume1mSMLUvdaWsJRbctAobQM", | |
"symbol": "INU", | |
"name": "Monster Inu", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/45HfvXJHY9msY2i4EmUpume1mSMLUvdaWsJRbctAobQM/logo.png", | |
"tags": [ | |
"meme-token", | |
"metaverse" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/inumonster", | |
"website": "https://inu.monster" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FEYFyLCFLcBNfSuaf2eXNvyY5Jpii7zg9X48Br5vyenG", | |
"symbol": "SUSDT", | |
"name": "Stether", | |
"decimals": 2, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FEYFyLCFLcBNfSuaf2eXNvyY5Jpii7zg9X48Br5vyenG/logo.png", | |
"tags": [ | |
"stablecoin" | |
], | |
"extensions": { | |
"website": "https://stether.io/" | |
} | |
}, | |
{ | |
"chainId": 102, | |
"address": "8ZY7EkwN7LxifYvvrQDbpjqxkrjHUFMwWgq8fupNNvub", | |
"symbol": "BIAD", | |
"name": "daib test token", | |
"decimals": 6, | |
"logoURI": "https://s3.us-west-2.amazonaws.com/secure.notion-static.com/02242929-14bc-4204-ac71-56d855a07078/512_daia.png?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20211104%2Fus-west-2%2Fs3%2Faws4_request\u0026X-Amz-Date=20211104T051518Z\u0026X-Amz-Expires=86400\u0026X-Amz-Signature=df1424dcb1be408faa45ef6af1f7769edf977da365822e00c34a2150167bfe58\u0026X-Amz-SignedHeaders=host\u0026response-content-disposition=filename%20%3D%22512_daia.png%22", | |
"extensions": { | |
"website": "https://daios.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4JEaBv49a4KdSrMduKZS3PcBCcPmPEmaY3uP7kXv6cj6", | |
"symbol": "$ASS", | |
"name": "Ass Coin", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/daddydonke/gem-farm-ui/main/public/images/icon.png", | |
"tags": [ | |
"MEMES-TOKEN", | |
"NFTS", | |
"DEX" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/solanadonkeBs", | |
"website": "https://solanadonkey.business" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "X71v8NH6dbLwPsn4TR1Tx38K4uWgGZ78mC599XSPJox", | |
"symbol": "SNS", | |
"name": "NSPACE Supporter", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/X71v8NH6dbLwPsn4TR1Tx38K4uWgGZ78mC599XSPJox/logo.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/NJjqzzXNKb", | |
"twitter": "https://twitter.com/mynftspace_art", | |
"website": "http://mynftspace.art/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "NpgsBSfavf5hmUeGQAbMz5pHDtXhn9ZFNRQypTr8Tfv", | |
"symbol": "NSPACE", | |
"name": "My NFT Space", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NpgsBSfavf5hmUeGQAbMz5pHDtXhn9ZFNRQypTr8Tfv/logo.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/NJjqzzXNKb", | |
"twitter": "https://twitter.com/mynftspace_art", | |
"website": "http://mynftspace.art/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "67Z7Pr4pX5iMczBox2bCgeU7Dy6SJRm2kZaMJoptstse", | |
"symbol": "KOMO", | |
"name": "Komondor", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/67Z7Pr4pX5iMczBox2bCgeU7Dy6SJRm2kZaMJoptstse/logo.svg", | |
"tags": [ | |
"community-token" | |
], | |
"extensions": { | |
"description": "KOMO is a community token, Dex, and Dapps on Solana.", | |
"discord": "https://discord.gg/yMVPDuZKeq", | |
"facebook": "https://web.facebook.com/komondor.so", | |
"github": "https://github.com/komondorok", | |
"instagram": "https://instagram.com/komondor.so", | |
"medium": "https://komondorok.medium.com/", | |
"telegram": "https://t.me/komondor_ann", | |
"twitter": "https://twitter.com/komondor_so", | |
"website": "https://komondor.so/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "p31qJ7LDLNRC57rU5GsXxFGBsnXheFXSsEn3avPoKDc", | |
"symbol": "ART", | |
"name": "Artchive-Coin", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/p31qJ7LDLNRC57rU5GsXxFGBsnXheFXSsEn3avPoKDc/logo.png", | |
"tags": [ | |
"utility-token", | |
"community-token", | |
"governance-token" | |
], | |
"extensions": { | |
"instagram": "https://www.instagram.com/artchive.nft/", | |
"website": "https://artchivecoins.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BiDB55p4G3n1fGhwKFpxsokBMqgctL4qnZpDH1bVQxMD", | |
"symbol": "DIO", | |
"name": "Decimated", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BiDB55p4G3n1fGhwKFpxsokBMqgctL4qnZpDH1bVQxMD/logo.png", | |
"tags": [ | |
"decimated", | |
"DIO", | |
"videogame", | |
"utility-token", | |
"virtual-currency" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/decimated_game", | |
"website": "https://www.decimated.net" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7QTcx3LuVfPSZxVzFJcTmbpQCL35jkfoNSzx4qouX495", | |
"symbol": "AKELA", | |
"name": "AKELA", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7QTcx3LuVfPSZxVzFJcTmbpQCL35jkfoNSzx4qouX495/logo.svg", | |
"tags": [ | |
"Akela", | |
"Meme" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/vBHgckmR", | |
"medium": "https://medium.com/@akelasolana", | |
"twitter": "https://twitter.com/AkelaTOKEN", | |
"website": "https://akelatoken.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3EkHyexJLGCvSxzn5umbtd9N69GoT4p5pfdLTFqCNP9Y", | |
"symbol": "HIPPO", | |
"name": "Hippo Coin", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3EkHyexJLGCvSxzn5umbtd9N69GoT4p5pfdLTFqCNP9Y/logo.png", | |
"tags": [ | |
"meme-token", | |
"community-token" | |
], | |
"extensions": { | |
"coingeckoId": "hippo-coin", | |
"discord": "https://discord.gg/sk3xN3sA8D", | |
"serumV3Usdc": "HnLKrfMN64ccSbYCj4DxjgPYveSkFujYrnMr4cvPfL8", | |
"twitter": "https://twitter.com/HipposCoin", | |
"website": "https://hippofamilynft.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BLT1noyNr3GttckEVrtcfC6oyK6yV1DpPgSyXbncMwef", | |
"symbol": "BLT", | |
"name": "Blocto Token", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BLT1noyNr3GttckEVrtcfC6oyK6yV1DpPgSyXbncMwef/logo.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"telegram": "https://t.me/blocto", | |
"twitter": "https://twitter.com/BloctoApp", | |
"website": "https://blocto.portto.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FoqP7aTaibT5npFKYKQQdyonL99vkW8YALNPwWepdvf5", | |
"symbol": "BIP", | |
"name": "BIP", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FoqP7aTaibT5npFKYKQQdyonL99vkW8YALNPwWepdvf5/logo.png", | |
"tags": [ | |
"NFT", | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/solanadbs", | |
"serumV3Usdc": "9tr5uMYHgtJ5yG4SeqHA6kJUdzXrK6QCNGYgewQevuuS", | |
"twitter": "https://twitter.com/solanadbs", | |
"website": "https://www.thestarship.finance/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2R78szN1fZeQvSmeiUPe7Db7BFTPee5EVE2FduQx8Wtw", | |
"symbol": "USDMD", | |
"name": "MONDOCOIN", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2R78szN1fZeQvSmeiUPe7Db7BFTPee5EVE2FduQx8Wtw/logo.png", | |
"extensions": { | |
"twitter": "https://twitter.com/mondocoin_usdmd", | |
"website": "https://mondocoin.org/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BYLotMdQmq579hhP9xDcuCJky9kmMrbp77eoktmm7a5Y", | |
"symbol": "CKG", | |
"name": "CryptoKnight's Gold", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BYLotMdQmq579hhP9xDcuCJky9kmMrbp77eoktmm7a5Y/logo.png", | |
"tags": [ | |
"NFT", | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/SYpnu7pTPS", | |
"twitter": "https://twitter.com/CryptoKnightSOL", | |
"website": "https://www.cryptoknights.me/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "F9tytWqLUAPXQTy6dejGtSgvJQZWYC71naD5bCi6caGX", | |
"symbol": "INUGAMI", | |
"name": "INUGAMI Coin", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/INVESTOR888/content/main/F9tytWqLUAPXQTy6dejGtSgvJQZWYC71naD5bCi6caGX.png", | |
"tags": [ | |
"meme-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/inugamicoin", | |
"website": "https://inugamicoin.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "B7RDhZ2iqE4FEwK5nfcZ9r2xhVL6rQJCo1dcjDXnF688", | |
"symbol": "LAT", | |
"name": "Latte", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B7RDhZ2iqE4FEwK5nfcZ9r2xhVL6rQJCo1dcjDXnF688/logo.png", | |
"extensions": { | |
"twitter": "https://twitter.com/lattenft", | |
"website": "https://www.lattetoken.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7Q2afV64in6N6SeZsAAB81TJzwDoD6zpqmHkzi9Dcavn", | |
"symbol": "JSOL", | |
"name": "JPOOL Solana Token", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Q2afV64in6N6SeZsAAB81TJzwDoD6zpqmHkzi9Dcavn/logo.svg", | |
"tags": [ | |
"stake-pool-token", | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/qR4BA9QXVR", | |
"telegram": "https://t.me/jpoolsolana", | |
"twitter": "https://twitter.com/JPoolSolana", | |
"website": "https://jpool.one/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7JYZmXjHenJxgLUtBxgYsFfoABmWQFA1fW3tHQKUBThV", | |
"symbol": "WEED", | |
"name": "Solana Weed", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7JYZmXjHenJxgLUtBxgYsFfoABmWQFA1fW3tHQKUBThV/logo.png", | |
"tags": [ | |
"social-token", | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/3cshJ2gVz6", | |
"telegram": "https://t.me/Solanaweed", | |
"twitter": "https://twitter.com/SolanaWeed", | |
"website": "https://solanaweed.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GaAzf7jwEKTouDXJExH9TKfvX3Ae7fLaGwNuEajq7KsE", | |
"symbol": "BARK", | |
"name": "Bark o Finance", | |
"decimals": 1, | |
"logoURI": "https://i.imgur.com/X90vi6d.png", | |
"tags": [ | |
"meme-token", | |
"utility-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/Bark_Solana" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5jFnsfx36DyGk8uVGrbXnVUMTsBkPXGpx6e69BiGFzko", | |
"symbol": "INU", | |
"name": "Solana INU", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5jFnsfx36DyGk8uVGrbXnVUMTsBkPXGpx6e69BiGFzko/logo.png", | |
"tags": [ | |
"Meme-token" | |
], | |
"extensions": { | |
"coingeckoId": "solana-inu", | |
"discord": "https://discord.gg/solanainu", | |
"serumV3Usdc": "G3Bss3a2tif6eHNzWCh14g5k2H4rwBAmE42tbckUWG5T", | |
"twitter": "https://twitter.com/solanainu", | |
"website": "http://solanainu.org" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GJsBLZPMConURkFkewZskmJLFjnYVSENZtHjqV7GnohC", | |
"symbol": "EMON", | |
"name": "DORAEMON TOKEN FANS", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GJsBLZPMConURkFkewZskmJLFjnYVSENZtHjqV7GnohC/logo.png", | |
"tags": [ | |
"MEMES-TOKEN", | |
"NFTs", | |
"DEX" | |
], | |
"extensions": { | |
"telegram": "https://t.me/emontoken", | |
"twitter": "https://twitter.com/emontoken", | |
"website": "https://doraemon.org" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7mNihWEjzWv9yCZc8capE4mS8v5Xvp5YH2yQhtZrQV5B", | |
"symbol": "SBreakpoint", | |
"name": "Solana Breakpoint", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/tribeland/token-list/main/assets/mainnet/7mNihWEjzWv9yCZc8capE4mS8v5Xvp5YH2yQhtZrQV5B/logo.png", | |
"tags": [ | |
"meme-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/8jSUfzjjDG" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6Km8PRUQxPmNX6EhmAuu3sFEnCP6uT2Yt42zPFR6VNnD", | |
"symbol": "RUG", | |
"name": "RugCoin", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Km8PRUQxPmNX6EhmAuu3sFEnCP6uT2Yt42zPFR6VNnD/logo.png", | |
"tags": [ | |
"community-token", | |
"meme-token", | |
"rug" | |
], | |
"extensions": { | |
"website": "https://rugcoin.rip" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "JTTez7NDqtU4ZqZJmLLXt6K9f75izfTApQqmvMCn4jU", | |
"symbol": "JTT", | |
"name": "Japan Travel Token", | |
"decimals": 0, | |
"logoURI": "http://www.japantravel.me/jtticon.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"website": "https://www.japantravel.me" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7K1ad6gYMDbRssecDkGdGpaRueSezZpgD28uYsyaEA8f", | |
"symbol": "SLNACK", | |
"name": "SolNack", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7K1ad6gYMDbRssecDkGdGpaRueSezZpgD28uYsyaEA8f/logo.png", | |
"tags": [ | |
"social-token", | |
"utility-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/Solnack_NFT", | |
"website": "https://www.solnack.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8hK6Vq53gwwYmvM2HuEeycGFn6ZDfynccHSuNJhWrTyd", | |
"symbol": "1Coin", | |
"name": "1Coin", | |
"decimals": 10, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8hK6Vq53gwwYmvM2HuEeycGFn6ZDfynccHSuNJhWrTyd/logo.png", | |
"tags": [ | |
"social-token", | |
"utility-token", | |
"social-token" | |
], | |
"extensions": { | |
"github": "https://github.com/1coin1", | |
"twitter": "https://twitter.com/1coincx", | |
"website": "https://1coin.cx" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3SaUThdYFoUX2FYUi9ZPf2TKTu3UYKhNHhXb2Y6najRg", | |
"symbol": "HIT", | |
"name": "Hello Token", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3SaUThdYFoUX2FYUi9ZPf2TKTu3UYKhNHhXb2Y6najRg/logo.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"facebook": "https://www.facebook.com/Hello-Entertainment-103715111864185", | |
"website": "https://app.gethello.net" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9ae76zqD3cgzR9gvf5Thc2NN3ACF7rqqnrLqxNzgcre6", | |
"symbol": "WIPE", | |
"name": "WipeMyAss", | |
"decimals": 9, | |
"logoURI": "https://cdn.jsdelivr.net/gh/rxrxrxrx/WipeMyAss/wipemyass.jpg", | |
"tags": [ | |
"community-token", | |
"meme-token", | |
"doge", | |
"dogecoin", | |
"solcum", | |
"monkey", | |
"woof", | |
"soldoge", | |
"samo", | |
"smb" | |
], | |
"extensions": { | |
"coingeckoId": "wipemyass", | |
"serumV3Usdc": "3kuUc5eTZyi7qajuFfDMMUUkqreEkUKtxQbVCjdriKVz", | |
"twitter": "https://twitter.com/WipeMyAssNFT", | |
"website": "https://wipemyass.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FTkj421DxbS1wajE74J34BJ5a1o9ccA97PkK6mYq9hNQ", | |
"symbol": "MINECRAFT", | |
"name": "Synex Coin", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FTkj421DxbS1wajE74J34BJ5a1o9ccA97PkK6mYq9hNQ/logo.png", | |
"tags": [ | |
"utility-token", | |
"community-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/N3BE44234A", | |
"telegram": "https://t.me/synexcoin", | |
"website": "https://synexcoin.dev" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EkDf4Nt89x4Usnxkj4sGHX7sWxkmmpiBzA4qdDkgEN6b", | |
"symbol": "SOB", | |
"name": "SolaLambo", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EkDf4Nt89x4Usnxkj4sGHX7sWxkmmpiBzA4qdDkgEN6b/logo.png", | |
"tags": [ | |
"community-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/sy2xymyc7J", | |
"twitter": "https://twitter.com/SolaLambo", | |
"website": "https://sob.finance/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Hj4sTP4L4rvR9WBR6KyK99sxPptBQQczNWe4y15mxhRD", | |
"symbol": "SNJ", | |
"name": "Sola Ninja", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/SolaToken/token-list/ninja/assets/mainnet/Hj4sTP4L4rvR9WBR6KyK99sxPptBQQczNWe4y15mxhRD/logo.png", | |
"tags": [ | |
"community-token" | |
], | |
"extensions": { | |
"serumV3Usdc": "FyVdsZs15c38b6vBjiYYfq9fPrcrZJjvMgjHtEB2T9Sa", | |
"telegram": "https://t.me/solatokennet", | |
"twitter": "https://twitter.com/EcoSolana", | |
"website": "https://solatoken.net/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9YdABeMBMjh5Pu8yPkJ9GETGWUT8KUK3B2RYBpjKNPsU", | |
"symbol": "GTA", | |
"name": "GTA LIVE", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9YdABeMBMjh5Pu8yPkJ9GETGWUT8KUK3B2RYBpjKNPsU/logo.svg", | |
"tags": [ | |
"game-fi", | |
"utility-token", | |
"meta-verse" | |
], | |
"extensions": { | |
"discord": "https://discord.gta.live", | |
"medium": "https://gtanft.medium.com/", | |
"reddit": "https://reddit.com/user/gtanft", | |
"telegram": "https://t.me/gtanft", | |
"twitter": "https://twitter.com/gtanft", | |
"website": "https://gta.live" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GqWbZDQaeJsiscgtGpDrJsNCxxeuHqJCGKs4oWBY1aYQ", | |
"symbol": "GTA", | |
"name": "GTA LIVE", | |
"decimals": 4, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GqWbZDQaeJsiscgtGpDrJsNCxxeuHqJCGKs4oWBY1aYQ/logo.png", | |
"tags": [ | |
"GameFi", | |
"DeFi", | |
"MetaVerse", | |
"stablecoin" | |
], | |
"extensions": { | |
"discord": "https://discord.gta.live", | |
"telegram": "https://t.me/gta_fiverp", | |
"website": "https://gta.live" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6H87YFkp5LHyN3KzDXa5r3QYce7WTcwYJi9SqwH3TXkQ", | |
"symbol": "AINU", | |
"name": "Akamaru Inu", | |
"decimals": 1, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6H87YFkp5LHyN3KzDXa5r3QYce7WTcwYJi9SqwH3TXkQ/logo.png", | |
"tags": [ | |
"meme-token", | |
"community-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/akamaruinusol", | |
"website": "https://akamaruinusol.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BZopZtZHqUY7ApiYTLjztQSgBoAsqQsJU3kFqHW27qEK", | |
"symbol": "NICK", | |
"name": "Nick Token", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZopZtZHqUY7ApiYTLjztQSgBoAsqQsJU3kFqHW27qEK/logo.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/nickchua5" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6Vg88xUHUPU9MfddHpu2cgx6CdodReiU8eGLPJgyhyVZ", | |
"symbol": "WLB", | |
"name": "WHALEBE", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Vg88xUHUPU9MfddHpu2cgx6CdodReiU8eGLPJgyhyVZ/logo.png", | |
"tags": [ | |
"token-games", | |
"nft-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/Whalebe_", | |
"website": "https://whalebe.art/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9SLCSSkEYL9YbKtAvw39xNzMEV4a7oLisGXhSJt73UCu", | |
"symbol": "KEVIN", | |
"name": "Kevin Token", | |
"decimals": 3, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9SLCSSkEYL9YbKtAvw39xNzMEV4a7oLisGXhSJt73UCu/logo.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/kevarifin" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AeTzmX6QcL6tWKMRTKVW9ee8fPmCieKzgfmiU7ZaY4gu", | |
"symbol": "SHIHT", | |
"name": "Shih Tzu", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AeTzmX6QcL6tWKMRTKVW9ee8fPmCieKzgfmiU7ZaY4gu/logo.png", | |
"tags": [ | |
"meme-token", | |
"community-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/ShihTzuSolana", | |
"website": "https://shihtcoin.io" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AATiVPgFBTJejUJrmkwnwH8UTr69CtfodGVCwMvrCa2U", | |
"symbol": "SOLM", | |
"name": "Solmanians", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AATiVPgFBTJejUJrmkwnwH8UTr69CtfodGVCwMvrCa2U/logo.png", | |
"tags": [ | |
"meme-token", | |
"nft-token", | |
"game-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/solmanians", | |
"website": "https://solmanians.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "ALMmmmbt5KNrPPUBFE4dAKUKSPWTop5s3kUGCdF69gmw", | |
"symbol": "ALM", | |
"name": "Almond", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALMmmmbt5KNrPPUBFE4dAKUKSPWTop5s3kUGCdF69gmw/logo.png", | |
"extensions": { | |
"coingeckoId": "almond", | |
"coinmarketcap": "https://coinmarketcap.com/currencies/almond/", | |
"discord": "https://discord.gg/MBWsChEdFw", | |
"serumV3Usdc": "DNxn3qM61GZddidjrzc95398SCWhm5BUyt8Y8SdKYr8W", | |
"twitter": "https://twitter.com/almond_so", | |
"website": "https://almond.so/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BSA5MfNRWc1CTJE1FD5ZErkNNLLWf9pqDyS3rCEYV1Re", | |
"symbol": "UWT", | |
"name": "Solana Underworld Token", | |
"decimals": 0, | |
"logoURI": "https://solsnatchers.com/images/head2.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/SolSnatchersNFT", | |
"website": "https://solsnatchers.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DGeHh4eoxGau3iH7PfdTJdRhZu4FWNgDFF1Czd3tNemT", | |
"symbol": "UMURPHY", | |
"name": "Uncle Murphy Coin", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DGeHh4eoxGau3iH7PfdTJdRhZu4FWNgDFF1Czd3tNemT/logo.png", | |
"tags": [ | |
"meme-token" | |
], | |
"extensions": { | |
"telegram": "https://t.me/joinchat/1x2i0txLEOY2Yjgy", | |
"twitter": "https://twitter.com/Driver29973042", | |
"website": "https://unclemurphycoin.org/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "ALKiRVrfLgzeAV2mCT7cJHKg3ZoPvsCRSV7VCRWnE8zQ", | |
"symbol": "NEKI", | |
"name": "Maneki-neko", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALKiRVrfLgzeAV2mCT7cJHKg3ZoPvsCRSV7VCRWnE8zQ/logo.png", | |
"tags": [ | |
"utility-token", | |
"meme-token", | |
"neki" | |
], | |
"extensions": { | |
"coingeckoId": "maneki-neko", | |
"twitter": "https://twitter.com/ManekiNekoLabs" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "D6yPmaM6SueQN4mteEQMiVFMbk6BSAShJAhuqyzVJ3fq", | |
"symbol": "YARN", | |
"name": "Yarn Coin", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D6yPmaM6SueQN4mteEQMiVFMbk6BSAShJAhuqyzVJ3fq/logo.png", | |
"tags": [ | |
"utility-token", | |
"payment-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/yarncoin", | |
"website": "https://yarncoin.io" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4BzxVoBQzwKoqm1dQc78r42Yby3EzAeZmMiYFdCjeu5Z", | |
"symbol": "SWOLE", | |
"name": "Swole Doge", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4BzxVoBQzwKoqm1dQc78r42Yby3EzAeZmMiYFdCjeu5Z/logo.png", | |
"extensions": { | |
"coingeckoId": "swole-doge", | |
"discord": "https://discord.gg/HfdHnhQkpB", | |
"serumV3Usdc": "3SGeuz8EXsyFo4HHWXQsoo8r4r5RdZkt7TuuTZiVbKc8", | |
"twitter": "https://twitter.com/swoledoge", | |
"website": "https://swoledogecoin.org" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "C3Rjiq8o2yiRWsmdSUSN276u5ah3UTqyWbZudLMG41pt", | |
"symbol": "PITXX", | |
"name": "Pi Token v2", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C3Rjiq8o2yiRWsmdSUSN276u5ah3UTqyWbZudLMG41pt/logo.png", | |
"extensions": { | |
"website": "https://tokeninfo.yolasite.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CC1gRBjsu8c7sf79wVd2Ub46X1UntPd81T7tmw7sTVYp", | |
"symbol": "BNN", | |
"name": "Banana", | |
"decimals": 9, | |
"logoURI": "https://cdn.jsdelivr.net/gh/tradeape/First_token_image/bnn.png" | |
}, | |
{ | |
"chainId": 101, | |
"address": "6oaVWSKRi4Pm1qVLf3fQFWFWygFhgswAL7Z466WE3cE8", | |
"symbol": "IMUA", | |
"name": "IMUA", | |
"decimals": 9, | |
"logoURI": "https://github.com/riversnout/imua/blob/main/rh.png", | |
"extensions": { | |
"website": "https://remnanthighway.org" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9Sbzj4DnRW8qFnfvJWwXxQMRkWKAwHLs9NgDuBFjkVgW", | |
"symbol": "PITDT", | |
"name": "Picasso Token Div Test", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Sbzj4DnRW8qFnfvJWwXxQMRkWKAwHLs9NgDuBFjkVgW/logo.png" | |
}, | |
{ | |
"chainId": 101, | |
"address": "CN7qFa5iYkHz99PTctvT4xXUHnxwjQ5MHxCuTJtPN5uS", | |
"symbol": "BOKU", | |
"name": "Boryoku Dragonz", | |
"decimals": 9, | |
"logoURI": "https://boryoku-dragonz-public.s3.us-east-2.amazonaws.com/BokuBrew.png", | |
"extensions": { | |
"coingeckoId": "boryoku-dragonz", | |
"coinmarketcap": "https://coinmarketcap.com/currencies/boku/", | |
"serumV3Usdc": "Dvm8jjdAy8uyXn9WXjS2p1mcPeFTuYS6yW2eUL9SJE8p", | |
"twitter": "https://twitter.com/BoryokuDragonz", | |
"website": "https://boryokudragonz.io" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "H7Qc9APCWWGDVxGD5fJHmLTmdEgT9GFatAKFNg6sHh8A", | |
"symbol": "OOGI", | |
"name": "OOGI", | |
"decimals": 9, | |
"logoURI": "https://oogi.com/icon.png", | |
"extensions": { | |
"coingeckoId": "oogi", | |
"discord": "https://discord.gg/oogi", | |
"serumV3Usdc": "ANUCohkG9gamUn6ofZEbnzGkjtyMexDhnjCwbLDmQ8Ub", | |
"telegram": "https://t.me/oogicoin", | |
"twitter": "https://twitter.com/oogicoin", | |
"website": "https://oogi.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GCxgQbbvJc4UyqGCsUAUa38npzZX27EMxZwckLuWeEkt", | |
"symbol": "NUTS", | |
"name": "NUTS", | |
"decimals": 9, | |
"logoURI": "https://user-images.githubusercontent.com/93886730/140664862-6dd80bff-be30-4c68-a978-fcb205011d61.png", | |
"extensions": { | |
"discord": "https://discord.gg/SSANFT", | |
"twitter": "https://twitter.com/SSA_NFT", | |
"website": "https://ssa.gg" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EFYKDdppK1FjixaxExpVhoTd8gtAmncbhQYruzWyG6Cx", | |
"symbol": "SPKL", | |
"name": "Spookeletons Token", | |
"decimals": 9, | |
"logoURI": "https://www.spookeletons.com/assets/spookeletons_token.png", | |
"extensions": { | |
"serumV3Usdc": "8nTQLcukiGQEQ1zguvmtLx95VJmZm5WxRsdBneaTGVmN", | |
"website": "https://www.spookeletons.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "31tCNEE6LiL9yW4Bu153Dq4vi2GuorXxCA9pW9aA6ecU", | |
"symbol": "SPKL", | |
"name": "Spookeletons Token", | |
"decimals": 9, | |
"logoURI": "https://www.spookeletons.com/assets/spookeletons_tokenv2.png", | |
"extensions": { | |
"serumV3Usdc": "6b51zj1C78Tn7R3nd9j4GvyShbMNxxufbU3mqPmbDRcz", | |
"website": "https://www.spookeletons.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "q4bpaRKw3fJB1AJBeeBaKv3TjYzWsmntLgnSB275YUb", | |
"symbol": "TRTLS", | |
"name": "Turtles Token", | |
"decimals": 9, | |
"logoURI": "https://www.turtles.com/turtles.png", | |
"extensions": { | |
"coingeckoId": "turtles-token", | |
"serumV3Usdc": "2dKHkfJGKNxmtwdLcsqXFGcb8Xppw5RP6YVWEWjSfAHm", | |
"website": "https://www.turtles.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FRtCrYT6oHEM7tdcfJJkDRMhqRWb9EjnobJSA2T95Put", | |
"symbol": "MMaps", | |
"name": "Map Metrics", | |
"decimals": 4, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FRtCrYT6oHEM7tdcfJJkDRMhqRWb9EjnobJSA2T95Put/logo.png", | |
"tags": [ | |
"utility-token", | |
"Community", | |
"NFT" | |
], | |
"extensions": { | |
"website": "https://mapmetrics.org/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EFqYVEitSUpUTj2d9LSqun4eZ4BzouFuTPqQzU4hNtsS", | |
"symbol": "MMaps", | |
"name": "MapMetrics", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EFqYVEitSUpUTj2d9LSqun4eZ4BzouFuTPqQzU4hNtsS/logo.png", | |
"tags": [ | |
"utility-token", | |
"Community", | |
"NFT" | |
], | |
"extensions": { | |
"website": "https://mapmetrics.org/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3CaBxqxWsP5oqS84Pkja4wLxyZYsHzMivQbnfwFJQeL1", | |
"symbol": "SOLFI", | |
"name": "SOLFI", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3CaBxqxWsP5oqS84Pkja4wLxyZYsHzMivQbnfwFJQeL1/logo.png", | |
"extensions": { | |
"twitter": "https://twitter.com/solfina_io", | |
"website": "https://solfina.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DdUm3gHS5nnB3XKnxEufnazb5ERa9vHjK6S3DgZi7QR5", | |
"symbol": "BTSL", | |
"name": "Bitsol Finance", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DdUm3gHS5nnB3XKnxEufnazb5ERa9vHjK6S3DgZi7QR5/logo.png", | |
"tags": [ | |
"DEX" | |
], | |
"extensions": { | |
"telegram": "https://t.me/bitsolfinance", | |
"twitter": "https://twitter.com/bitsol_finance", | |
"website": "https://bitsol.finance" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8f9s1sUmzUbVZMoMh6bufMueYH1u4BJSM57RCEvuVmFp", | |
"symbol": "TRUE", | |
"name": "TrueSight", | |
"decimals": 9, | |
"logoURI": "https://i.ibb.co/pKTWrwP/true.jpg", | |
"tags": [ | |
"utility-token", | |
"capital-token" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "2Dzzc14S1D7cEFGJyMZMACuoQRHVUYFhVE74C5o8Fwau", | |
"symbol": "BAB", | |
"name": "Banana Bucks", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Dzzc14S1D7cEFGJyMZMACuoQRHVUYFhVE74C5o8Fwau/logo.svg", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"website": "http://bananabucks.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GdRNeX9mbzCt4AnfiUFLbYZmxRuW7pGHfjbbAM59ZybR", | |
"symbol": "SLFT", | |
"name": "SOLife", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GdRNeX9mbzCt4AnfiUFLbYZmxRuW7pGHfjbbAM59ZybR/logo.png", | |
"tags": [ | |
"utility-token", | |
"social-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/SOLifeNFT", | |
"website": "https://solife.town" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AASdD9rAefJ4PP7iM89MYUsQEyCQwvBofhceZUGDh5HZ", | |
"symbol": "SLX", | |
"name": "Solex Finance", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solexfin/token-list/main/assets/mainnet/AASdD9rAefJ4PP7iM89MYUsQEyCQwvBofhceZUGDh5HZ/logo.png", | |
"tags": [ | |
"Exchange", | |
"DApp" | |
], | |
"extensions": { | |
"coingeckoId": "solex-finance", | |
"serumV3Usdc": "7xy4r55rLu2QYeSGwTGDCBKEYERDX98f6kQLn9Zre6S3", | |
"twitter": "https://twitter.com/SolexFinance", | |
"website": "https://solex.finance/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HppJbUYU4a9i3dXo1x1SS5ieaKEz4cAPWMg4eNQzabzg", | |
"symbol": "BLOCKING", | |
"name": "Blocking", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HppJbUYU4a9i3dXo1x1SS5ieaKEz4cAPWMg4eNQzabzg/logo.png", | |
"tags": [ | |
"NFT", | |
"Blocking" | |
], | |
"extensions": { | |
"website": "http://blocking.adchunha.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4HjScxnKaowf2SJzEKUCaHLJUe4qUBX15jCop6FQ4Ht1", | |
"symbol": "Z", | |
"name": "Zeus", | |
"decimals": 5, | |
"logoURI": "https://www.pnglib.com/wp-content/uploads/2021/02/letter-z_60235255a2bf7.png", | |
"tags": [ | |
"Exchange", | |
"DApp" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "Aojru8bfwZK6sgrx6exNazxASFZUjPpRY59byMrs6izt", | |
"symbol": "OINK", | |
"name": "OINK", | |
"decimals": 10, | |
"logoURI": "https://raw.githubusercontent.com/dungnc/luckypigsNFT/main/SYMBOL.jpeg", | |
"tags": [ | |
"meme", | |
"social-token", | |
"oink" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/GiftedLabs", | |
"website": "http://luckypignfts.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5sM9xxcBTM9rWza6nEgq2cShA87JjTBx1Cu82LjgmaEg", | |
"symbol": "BMBO", | |
"name": "Bamboo", | |
"decimals": 7, | |
"logoURI": "https://raw.githubusercontent.com/rishkumaria/bamboo/main/bamboo.png", | |
"extensions": { | |
"coingeckoId": "bamboo-coin" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5F3beSzHFv1m3T2Sqp7dNQPYrZeetLZ8JYe6QPW6cqKA", | |
"symbol": "ZEUS", | |
"name": "ZEUS", | |
"decimals": 8, | |
"logoURI": "https://previews.123rf.com/images/arbuzu/arbuzu1501/arbuzu150100014/35131140-letter-z-logo-icon-design-template-elements.jpg", | |
"tags": [ | |
"NFT", | |
"ZEUS" | |
], | |
"extensions": { | |
"website": "http://test.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "C8QMoDwQADoW4MVkDZx7HgnebeugnNXWztrqpcCT2mFj", | |
"symbol": "SHARK", | |
"name": "Rogue Shark 129", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/L0px1n/token-list/main/assets/mainnet/shark.jpeg", | |
"tags": [ | |
"NFT", | |
"stablecoin" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "4oyPeSSUwfxExjBU76fTfAFHHrZ3HVwCHWqAUdpeFg6h", | |
"symbol": "SHARK", | |
"name": "Rogue Shark 129", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/L0px1n/token-list/main/assets/mainnet/shark.jpeg" | |
}, | |
{ | |
"chainId": 101, | |
"address": "9CuowWiTMFBeC5ntjdAeMv3W72vzwveCC9ATTjnjXjNx", | |
"symbol": "KRCH", | |
"name": "KrechetovNFT", | |
"decimals": 0, | |
"logoURI": "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Toyota_GT86_%E2%80%93_Frontansicht%2C_17._September_2012%2C_D%C3%BCsseldorf.jpg/1200px-Toyota_GT86_%E2%80%93_Frontansicht%2C_17._September_2012%2C_D%C3%BCsseldorf.jpg", | |
"tags": [ | |
"NFT", | |
"stablecoin" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "EZF2sPJRe26e8iyXaCrmEefrGVBkqqNGv9UPGG9EnTQz", | |
"symbol": "FUM", | |
"name": "FUMoney", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/FUMoney801/token-list/main/assets/mainnet/EZF2sPJRe26e8iyXaCrmEefrGVBkqqNGv9UPGG9EnTQz/logo.png", | |
"tags": [ | |
"social-token", | |
"utility-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/FUMindset", | |
"website": "https://FUMoney.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9XtRZwKzDXEJ61A7qCqbPz8jXMYHGT3LwxqrEzB6fqxv", | |
"symbol": "SOLUM", | |
"name": "Solum", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9XtRZwKzDXEJ61A7qCqbPz8jXMYHGT3LwxqrEzB6fqxv/logo.png", | |
"extensions": { | |
"coingeckoId": "solum", | |
"telegram": "https://t.me/solumfinance", | |
"twitter": "https://twitter.com/solumDefi", | |
"website": "https://solum.finance/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "31HcuZjFHCV8VcydRjXz9NFnte4RVRRuR5n9rECfy79W", | |
"symbol": "BOOZ", | |
"name": "boozcoin", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/jatoshi/token-list/main/BoozCoin%20Logo%202021-07-21.png", | |
"extensions": { | |
"telegram": "https://t.me/boozcoin", | |
"twitter": "https://twitter.com/boozcoin", | |
"website": "https://boozcoin.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7Y2FprWHsBYCFkTpWiQ123BMPgWWquraaZHy6oFofcvs", | |
"symbol": "JDBEAR", | |
"name": "JareBear", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/7Y2FprWHsBYCFkTpWiQ123BMPgWWquraaZHy6oFofcvs/logo.png", | |
"tags": [ | |
"leveraged", | |
"bear", | |
"nft" | |
], | |
"extensions": { | |
"website": "https://stacc.art/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "D3gRmoveMFa8e3ziw5XCwCByHKiSk76T4fi62GXNYXHi", | |
"symbol": "JDBULL", | |
"name": "JareBool", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/D3gRmoveMFa8e3ziw5XCwCByHKiSk76T4fi62GXNYXHi/logo.png", | |
"tags": [ | |
"leveraged", | |
"bull", | |
"nft" | |
], | |
"extensions": { | |
"website": "https://stacc.art/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8z55xQupEQcjAQTJy3BwZJX24pmtCJDo8MEe9Ub7a3Yv", | |
"symbol": "SHAK", | |
"name": "Shakudo", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/8z55xQupEQcjAQTJy3BwZJX24pmtCJDo8MEe9Ub7a3Yv/logo.svg", | |
"extensions": { | |
"website": "https://shakudo.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7ypyxaQoHcJwoo9wXsc3tqL6PN4UQuEoyyfg5xjDX1Dj", | |
"symbol": "MMY", | |
"name": "Mummy", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/7ypyxaQoHcJwoo9wXsc3tqL6PN4UQuEoyyfg5xjDX1Dj/logo.png", | |
"extensions": { | |
"website": "https://mummy.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HavbxBPK1uY9kMNqKPkWDEQXWw6FYERrLxeMtWiXnwko", | |
"symbol": "SXP", | |
"name": "Stacc eXPerience Points", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/HavbxBPK1uY9kMNqKPkWDEQXWw6FYERrLxeMtWiXnwko/logo.svg", | |
"extensions": { | |
"discord": "https://discord.gg/WUTFtgDhXd", | |
"twitter": "https://twitter.com/STACCart", | |
"website": "https://stacc.art/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2A5esErqMaJXhrs1i6CtjbVxTbgsY9JbDedVsuVMQ6aY", | |
"symbol": "SJP", | |
"name": "Stacc Job Points", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/2A5esErqMaJXhrs1i6CtjbVxTbgsY9JbDedVsuVMQ6aY/logo.svg", | |
"extensions": { | |
"discord": "https://discord.gg/WUTFtgDhXd", | |
"twitter": "https://twitter.com/STACCart", | |
"website": "https://stacc.art/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "84vmWvKxebcnZL5JPnqkzPFVBaL4y5uGCRRJW2a9P4SL", | |
"symbol": "cvs", | |
"name": "coinvs", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/CoinVs/brand-assets/master/logo/logo.png", | |
"tags": [ | |
"coinversus", | |
"cvs", | |
"entertainment", | |
"gaming", | |
"NFT", | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/F84VmCtByV", | |
"facebook": "https://www.facebook.com/coinversusofficial", | |
"github": "https://github.com/CoinVs", | |
"instagram": "https://www.instagram.com/coinversus/", | |
"reddit": "https://www.reddit.com/r/coinversus/", | |
"telegram": "https://t.me/coinvs", | |
"twitter": "https://twitter.com/CoinVersus", | |
"website": "https://coinversus.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9KYMTqKY7f2cJKW2wYfNRpLb9zbB1tTyEbaTuzy4Gwwc", | |
"symbol": "SGP", | |
"name": "Stacc Gold Points", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/9KYMTqKY7f2cJKW2wYfNRpLb9zbB1tTyEbaTuzy4Gwwc/logo.svg", | |
"extensions": { | |
"discord": "https://discord.gg/WUTFtgDhXd", | |
"twitter": "https://twitter.com/STACCart", | |
"website": "https://stacc.art/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2uRFEWRBQLEKpLmF8mohFZGDcFQmrkQEEZmHQvMUBvY7", | |
"symbol": "SLB", | |
"name": "Solberg", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2uRFEWRBQLEKpLmF8mohFZGDcFQmrkQEEZmHQvMUBvY7/logo.svg", | |
"extensions": { | |
"coingeckoId": "solberg", | |
"discord": "https://discord.gg/2w7J25Xgce", | |
"instagram": "https://www.instagram.com/solbergtoken/", | |
"serumV3Usdc": "4MUhHF5K9simSLXuaUKMaU8nMHSCRPzPMe7UtJRXi4HZ", | |
"serumV3Usdt": "46jD4hpmvUAbhKaoAjdzFkY82VW1j9SMTEYFGcTor8Ww", | |
"telegram": "https://t.me/solbergofficial", | |
"twitter": "https://twitter.com/SolbergToken", | |
"website": "https://www.solbergtoken.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HDLRMKW1FDz2q5Zg778CZx26UgrtnqpUDkNNJHhmVUFr", | |
"symbol": "MILLI", | |
"name": "MILLIONSY", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/millionsy/token-list/main/assets/mainnet/HDLRMKW1FDz2q5Zg778CZx26UgrtnqpUDkNNJHhmVUFr/logo.png", | |
"extensions": { | |
"telegram": "https://t.me/MILLIONSYofficialchat", | |
"twitter": "https://twitter.com/MILLIONSYio", | |
"website": "https://www.millionsy.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7ic3cSqD6iiwsqxDyBbcs2qYfMcKY2HndLDrjhMKZ4cQ", | |
"symbol": "$SOLY", | |
"name": "Solana Yield", | |
"decimals": 8, | |
"logoURI": "https://github.com/saimaliabrish/Solana-yield-logo/blob/main/IMG_20210923_195019_436.png", | |
"extensions": { | |
"twitter": "https://twitter.com/AbrishSaim" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Dw3E5NJGyAZ5QmeB165cGf2gfc9ktyFu55wMyh3MaJov", | |
"symbol": "TKC", | |
"name": "Tugscom Coin", | |
"decimals": 9, | |
"logoURI": "https://tugscom.mn/tkc.png", | |
"tags": [ | |
"TKC", | |
"Tugscom" | |
], | |
"extensions": { | |
"website": "https://tugscom.mn/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "99pifp4v4qQNk3irTHpmAEEzgKfs3ahLE7iFKEqfyxPj", | |
"symbol": "ZI", | |
"name": "ZI (The Z Institute Token)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/99pifp4v4qQNk3irTHpmAEEzgKfs3ahLE7iFKEqfyxPj/logo.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/the_z_institute", | |
"website": "https://zinstitute.net/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FYfQ9uaRaYvRiaEGUmct45F9WKam3BYXArTrotnTNFXF", | |
"symbol": "SOLA", | |
"name": "Sola Token", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FYfQ9uaRaYvRiaEGUmct45F9WKam3BYXArTrotnTNFXF/logo.png", | |
"tags": [ | |
"community-token" | |
], | |
"extensions": { | |
"coingeckoId": "sola-token", | |
"serumV3Usdc": "4RZ27tjRnSwrtRqsJxDEgsERnDKFs7yx6Ra3HsJvkboy", | |
"telegram": "https://t.me/solatokennet", | |
"twitter": "https://twitter.com/EcoSolana", | |
"website": "https://solatoken.net/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "So11111111111111111111111111111111111111112", | |
"symbol": "SOL", | |
"name": "Wrapped SOL", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png", | |
"extensions": { | |
"coingeckoId": "solana", | |
"serumV3Usdc": "9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT", | |
"serumV3Usdt": "HWHvQhFmJB3NUcu1aihKmrKegfVxBEHzwVX6yZCKEsi1", | |
"website": "https://solana.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", | |
"symbol": "USDC", | |
"name": "USD Coin", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png", | |
"tags": [ | |
"stablecoin" | |
], | |
"extensions": { | |
"coingeckoId": "usd-coin", | |
"serumV3Usdt": "77quYg4MGneUdjgXCunt9GgM1usmrxKY31twEy3WHwcS", | |
"website": "https://www.centre.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "SrZXMTPhY8TEJMXQEhHKbFdVY2oNSGR5YqMMGK6Zm7L", | |
"symbol": "BDNT", | |
"name": "Battle Drone Native Token", | |
"decimals": 9, | |
"logoURI": "https://battledronesnft.com/BDNT.png", | |
"tags": [ | |
"utility-token", | |
"BDNT" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/jRz63Dsa3p", | |
"twitter": "https://twitter.com/BattleDronesNFT", | |
"website": "https://battledronesnft.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2inRoG4DuMRRzZxAt913CCdNZCu2eGsDD9kZTrsj2DAZ", | |
"symbol": "TSLA", | |
"name": "Tesla Inc", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2inRoG4DuMRRzZxAt913CCdNZCu2eGsDD9kZTrsj2DAZ/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?TSLA" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8bpRdBGPt354VfABL5xugP3pmYZ2tQjzRcqjg2kmwfbF", | |
"symbol": "AAPL", | |
"name": "Apple Inc", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8bpRdBGPt354VfABL5xugP3pmYZ2tQjzRcqjg2kmwfbF/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?AAPL" | |
} | |
}, | |
{ | |
"chainId": 103, | |
"address": "DGGETjRbXeNyq2bpA7FLmWwqjFLtS8p5aYjzUwtAHtZd", | |
"symbol": "Aiko", | |
"name": "Aiko", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7YBn43cTvko7mfZ9YV1iyAUfHNuMp6aAy4rX7wehXcbU/logo.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.com/invite/Y72V9wn3Yw", | |
"medium": "https://aikonft.medium.com/", | |
"reddit": "https://www.reddit.com/r/AikoNFT/", | |
"twitter": "https://twitter.com/aikonft", | |
"website": "https://aiko.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7J2cEFFhMCsdUBWssnYfUG5z6zYJYCUaTNPTxH3k9aVY", | |
"symbol": "AIKO", | |
"name": "Aiko", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7J2cEFFhMCsdUBWssnYfUG5z6zYJYCUaTNPTxH3k9aVY/logo.png", | |
"tags": [ | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.com/invite/Y72V9wn3Yw", | |
"reddit": "https://www.reddit.com/r/AikoNFT/", | |
"twitter": "https://twitter.com/aikonft", | |
"website": "https://aiko.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3vhcrQfEn8ashuBfE82F3MtEDFcBCEFfFw1ZgM3xj1s8", | |
"symbol": "MSFT", | |
"name": "Microsoft Corporation", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3vhcrQfEn8ashuBfE82F3MtEDFcBCEFfFw1ZgM3xj1s8/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?MSFT" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HNXTQPd5FkGX7USMufrxkvUQkTGmNFxVYCnAhuR941mm", | |
"symbol": "DOWIT", | |
"name": "DOWIT", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HNXTQPd5FkGX7USMufrxkvUQkTGmNFxVYCnAhuR941mm/logo.png", | |
"extensions": { | |
"website": "https://dowit-coin.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4R8DBzZEzjBQzPJe4qqaxXM97am7unGM1ZYfviS6oSFe", | |
"symbol": "ANU", | |
"name": "ANUBEAST", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/ANUBEAST/ANUBEAST/master/assets/logo.png", | |
"tags": [ | |
"stake" | |
], | |
"extensions": { | |
"website": "https://github.com/ANUBEAST" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "ASwYCbLedk85mRdPnkzrUXbbYbwe26m71af9rzrhC2Qz", | |
"symbol": "MSTR", | |
"name": "MicroStrategy Incorporated", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ASwYCbLedk85mRdPnkzrUXbbYbwe26m71af9rzrhC2Qz/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?MSTR" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "J25jdsEgTnAwB4nVq3dEQhwekbXCnVTGzFpVMPScXRgK", | |
"symbol": "COIN", | |
"name": "Coinbase Global Inc", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J25jdsEgTnAwB4nVq3dEQhwekbXCnVTGzFpVMPScXRgK/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?COIN" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "G2Cg4XoXdEJT5sfrSy9N6YCC3uuVV3AoTQSvMeSqT8ZV", | |
"symbol": "ABC", | |
"name": "AmerisourceBergen Corp", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G2Cg4XoXdEJT5sfrSy9N6YCC3uuVV3AoTQSvMeSqT8ZV/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?ABC" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FqqVanFZosh4M4zqxzWUmEnky6nVANjghiSLaGqUAYGi", | |
"symbol": "ABNB", | |
"name": "Airbnb", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FqqVanFZosh4M4zqxzWUmEnky6nVANjghiSLaGqUAYGi/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?ABNB" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FgcUo7Ymua8r5xxsn9puizkLGN5w4i3nnBmasXvkcWfJ", | |
"symbol": "ACB", | |
"name": "Aurora Cannabis Inc", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgcUo7Ymua8r5xxsn9puizkLGN5w4i3nnBmasXvkcWfJ/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?ACB" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FenmUGWjsW5AohtHRbgLoPUZyWSK36Cd5a31XJWjnRur", | |
"symbol": "AMC", | |
"name": "AMC Entertainment Holdings", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FenmUGWjsW5AohtHRbgLoPUZyWSK36Cd5a31XJWjnRur/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?AMC" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7grgNP3tAJh7DRELmotHzC5Efth4e4SoBvgmFYTX9jPB", | |
"symbol": "AMD", | |
"name": "Advanced Micro Devices", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7grgNP3tAJh7DRELmotHzC5Efth4e4SoBvgmFYTX9jPB/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?AMD" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3bjpzTTK49eP8m1bYxw6HYAFGtzyWjvEyGYcFS4gbRAx", | |
"symbol": "AMZN", | |
"name": "Amazon", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3bjpzTTK49eP8m1bYxw6HYAFGtzyWjvEyGYcFS4gbRAx/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?AMZN" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4cr7NH1BD2PMV38JQp58UaHUxzqhxeSiF7b6q1GCS7Ae", | |
"symbol": "APHA", | |
"name": "Aphria Inc", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4cr7NH1BD2PMV38JQp58UaHUxzqhxeSiF7b6q1GCS7Ae/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?APHA" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GPoBx2hycDs3t4Q8DeBme9RHb9nQpzH3a36iUoojHe16", | |
"symbol": "ARKK", | |
"name": "ARK Innovation ETF", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GPoBx2hycDs3t4Q8DeBme9RHb9nQpzH3a36iUoojHe16/logo.png", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?ARKK" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GgDDCnzZGQRUDy8jWqSqDDcPwAVg2YsKZfLPaTYBWdWt", | |
"symbol": "BABA", | |
"name": "Alibaba", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GgDDCnzZGQRUDy8jWqSqDDcPwAVg2YsKZfLPaTYBWdWt/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?BABA" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6jSgnmu8yg7kaZRWp5MtQqNrWTUDk7KWXhZhJPmsQ65y", | |
"symbol": "BB", | |
"name": "BlackBerry", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6jSgnmu8yg7kaZRWp5MtQqNrWTUDk7KWXhZhJPmsQ65y/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?BB" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5HHv6HAyBtaihyHEapCJvjE6iRbGLRmm3F5EZjz6EzHV", | |
"symbol": "wID_v1", | |
"name": "Everest ID (Wormhole v1)", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5HHv6HAyBtaihyHEapCJvjE6iRbGLRmm3F5EZjz6EzHV/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0xEBd9D99A3982d547C5Bb4DB7E3b1F9F14b67Eb83", | |
"assetContract": "https://etherscan.io/address/0xEBd9D99A3982d547C5Bb4DB7E3b1F9F14b67Eb83", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "everid", | |
"twitter": "https://twitter.com/EverestDotOrg", | |
"website": "https://everest.org" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9Vovr1bqDbMQ8DyaizdC7n1YVvSia8r3PQ1RcPFqpQAs", | |
"symbol": "BILI", | |
"name": "Bilibili Inc", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Vovr1bqDbMQ8DyaizdC7n1YVvSia8r3PQ1RcPFqpQAs/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?BILI" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "j35qY1SbQ3k7b2WAR5cNETDKzDESxGnYbArsLNRUzg2", | |
"symbol": "BITW", | |
"name": "Bitwise 10 Crypto Index Fund", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/j35qY1SbQ3k7b2WAR5cNETDKzDESxGnYbArsLNRUzg2/logo.png", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?BITW" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AykRYHVEERRoKGzfg2AMTqEFGmCGk9LNnGv2k5FgjKVB", | |
"symbol": "BNTX", | |
"name": "BioNTech", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AykRYHVEERRoKGzfg2AMTqEFGmCGk9LNnGv2k5FgjKVB/logo.png", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?BNTX" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Dj76V3vdFGGE8444NWFACR5qmtJrrSop5RCBAGbC88nr", | |
"symbol": "BRKA", | |
"name": "Berkshire Hathaway Inc", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dj76V3vdFGGE8444NWFACR5qmtJrrSop5RCBAGbC88nr/logo.png", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?BRKA" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8TUg3Kpa4pNfaMvgyFdvwyiPBSnyTx7kK5EDfb42N6VK", | |
"symbol": "BYND", | |
"name": "Beyond Meat Inc", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8TUg3Kpa4pNfaMvgyFdvwyiPBSnyTx7kK5EDfb42N6VK/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?BYND" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8FyEsMuDWAMMusMqVEstt2sDkMvcUKsTy1gF6oMfWZcG", | |
"symbol": "CGC", | |
"name": "Canopy Growth Corp", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8FyEsMuDWAMMusMqVEstt2sDkMvcUKsTy1gF6oMfWZcG/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?CGC" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DUFVbhWf7FsUo3ouMnFbDjv4YYaRE1Sz9jvAmDsNTt1m", | |
"symbol": "CRON", | |
"name": "Chronos Group Inc", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DUFVbhWf7FsUo3ouMnFbDjv4YYaRE1Sz9jvAmDsNTt1m/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?CRON" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "J9GVpBChXZ8EK7JuPsLSDV17BF9KLJweBQet3L6ZWvTC", | |
"symbol": "EEM", | |
"name": "iShares MSCI Emerging Markets ETF", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J9GVpBChXZ8EK7JuPsLSDV17BF9KLJweBQet3L6ZWvTC/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?EEM" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6Xj2NzAW437UUomaxFiVyJQPGvvup6YLeXFQpp4kqNaD", | |
"symbol": "EFA", | |
"name": "iShares MSCI EAFE ETF", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Xj2NzAW437UUomaxFiVyJQPGvvup6YLeXFQpp4kqNaD/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?EFA" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5YMFoVuoQzdivpm6W97UGKkHxq6aEhipuNkA8imPDoa1", | |
"symbol": "ETHE", | |
"name": "Grayscale Ethereum Trust", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5YMFoVuoQzdivpm6W97UGKkHxq6aEhipuNkA8imPDoa1/logo.png", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?ETHE" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "C9vMZBz1UCmYSCmMcZFw6N9AsYhXDAWnuhxd8ygCA1Ah", | |
"symbol": "EWA", | |
"name": "iShares MSCI Australia ETF", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C9vMZBz1UCmYSCmMcZFw6N9AsYhXDAWnuhxd8ygCA1Ah/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?EWA" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AcXn3WXPARC7r5JwrkPHSUmBGWyWx1vRydNHXXvgc8V6", | |
"symbol": "EWJ", | |
"name": "iShares MSCI Japan ETF", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AcXn3WXPARC7r5JwrkPHSUmBGWyWx1vRydNHXXvgc8V6/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?EWJ" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8ihxfcxBZ7dZyfnpXJiGrgEZfrKWbZUk6LjfosLrQfR", | |
"symbol": "EWY", | |
"name": "iShares MSCI South Korea ETF", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8ihxfcxBZ7dZyfnpXJiGrgEZfrKWbZUk6LjfosLrQfR/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?EWY" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "N5ykto2MU7CNcLX7sgWFe3M2Vpy7wq8gDt2sVNDe6aH", | |
"symbol": "EWZ", | |
"name": "iShares MSCI Brazil ETF", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/N5ykto2MU7CNcLX7sgWFe3M2Vpy7wq8gDt2sVNDe6aH/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?EWZ" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3K9pfJzKiAm9upcyDWk5NBVdjxVtqXN8sVfQ4aR6qwb2", | |
"symbol": "FB", | |
"name": "Facebook", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3K9pfJzKiAm9upcyDWk5NBVdjxVtqXN8sVfQ4aR6qwb2/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?FB" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Ege7FzfrrBSusVQrRUuTiFVCSc8u2R9fRWh4qLjdNYfz", | |
"symbol": "FXI", | |
"name": "iShares China Large-Cap ETF", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ege7FzfrrBSusVQrRUuTiFVCSc8u2R9fRWh4qLjdNYfz/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?FXI" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FiV4TtDtnjaf8m8vw2a7uc9hRoFvvu9Ft7GzxiMujn3t", | |
"symbol": "GBTC", | |
"name": "Grayscale Bitcoin Trust", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FiV4TtDtnjaf8m8vw2a7uc9hRoFvvu9Ft7GzxiMujn3t/logo.png", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?GBTC" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7FYk6a91TiFWigBvCf8KbuEMyyfpqET5QHFkRtiD2XxF", | |
"symbol": "GDX", | |
"name": "VanEck Vectors Gold Miners Etf", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7FYk6a91TiFWigBvCf8KbuEMyyfpqET5QHFkRtiD2XxF/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?GDX" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EGhhk4sHgY1SBYsgkfgyGNhAKBXqn6QyKNx7W13evx9D", | |
"symbol": "GDXJ", | |
"name": "VanEck Vectors Junior Gold Miners Etf", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EGhhk4sHgY1SBYsgkfgyGNhAKBXqn6QyKNx7W13evx9D/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?GDXJ" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9HyU5EEyPvkxeuekNUwsHzmMCJoiw8FZBGWaNih2oux1", | |
"symbol": "GLD", | |
"name": "SPDR Gold Shares", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9HyU5EEyPvkxeuekNUwsHzmMCJoiw8FZBGWaNih2oux1/logo.png", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?GLD" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EYLa7susWhzqDNKYe7qLhFHb3Y9kdNwThc6QSnc4TLWN", | |
"symbol": "GLXY", | |
"name": "Galaxy Digital Holdings", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EYLa7susWhzqDNKYe7qLhFHb3Y9kdNwThc6QSnc4TLWN/logo.png", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?GLXY" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Ac2wmyujRxiGtb5msS7fKzGycaCF7K8NbVs5ortE6MFo", | |
"symbol": "GME", | |
"name": "GameStop", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ac2wmyujRxiGtb5msS7fKzGycaCF7K8NbVs5ortE6MFo/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?GME" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7uzWUPC6XsWkgFAuDjpZgPVH9p3WqeKTvTJqLM1RXX6w", | |
"symbol": "GOOGL", | |
"name": "Google", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7uzWUPC6XsWkgFAuDjpZgPVH9p3WqeKTvTJqLM1RXX6w/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?GOOGL" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "XJUMvw7KRLoLCYVD727jV9fjNUSDVcZaQUK6XpY6kGm", | |
"symbol": "IF", | |
"name": "Impossible Finance", | |
"decimals": 9, | |
"logoURI": "https://gateway.pinata.cloud/ipfs/QmcfMbNuvDV6ho3fueNPFTtgSruaUBmSdqP5D5ZduipN6S/logo.png", | |
"tags": [ | |
"ethereum" | |
], | |
"extensions": { | |
"coingeckoId": "impossible-finance", | |
"website": "https://impossible.finance" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CnLLrX9A8RhKpq8Z3CKko7sQMqN2AXj8AfFyxxoBBEFf", | |
"symbol": "CH", | |
"name": "COIN HUNTER", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CnLLrX9A8RhKpq8Z3CKko7sQMqN2AXj8AfFyxxoBBEFf/logo.png", | |
"extensions": { | |
"website": "https://bit.ly/Coin-Hunter" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CB3obConLVWpo8RtTANzBSURmJnAVgy5xznvQfWXDfpR", | |
"symbol": "PURITY", | |
"name": "PURITY", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CB3obConLVWpo8RtTANzBSURmJnAVgy5xznvQfWXDfpR/logo.png", | |
"extensions": { | |
"website": "https://github.com/teampurity" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GkDg1ZfoFkroLAwLqtJNXhxCDg8gmKxHAGxSUZagYFfE", | |
"symbol": "SOL100", | |
"name": "SOL100", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GkDg1ZfoFkroLAwLqtJNXhxCDg8gmKxHAGxSUZagYFfE/logo.png", | |
"extensions": { | |
"website": "https://github.com/teampurity" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5E2742iZRZgZF94bfz39NgV9wjppe24YrQJVu6niLPMA", | |
"symbol": "GPA", | |
"name": "GALAXY PANDA", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5E2742iZRZgZF94bfz39NgV9wjppe24YrQJVu6niLPMA/logo.png", | |
"extensions": { | |
"website": "http://galaxypanda.space" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4oyFkXQhvvDFa8cvShR4zwhYJ1RfhRzQjVAx1wemmjs6", | |
"symbol": "GRU", | |
"name": "GURU", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4oyFkXQhvvDFa8cvShR4zwhYJ1RfhRzQjVAx1wemmjs6/logo.png", | |
"extensions": { | |
"website": "https://solanaguru.web.app" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8MpuLZGs52qdj4aGkgxrjjBbDQQd2dsKtbRpCpMb4g8o", | |
"symbol": "TST", | |
"name": "CHTST", | |
"decimals": 9, | |
"logoURI": "" | |
}, | |
{ | |
"chainId": 101, | |
"address": "4796pBun8ihiecy4unZuLWoSVRmK8sf7yQMbwkkvZDH3", | |
"symbol": "BLOK", | |
"name": "BLOCITIES", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4796pBun8ihiecy4unZuLWoSVRmK8sf7yQMbwkkvZDH3/logo.png", | |
"extensions": { | |
"website": "https://blocities.finance" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "C4kmKzQ8o6NAP8pToERJF6C7V4PjCVE3o2oSrp24f5GP", | |
"symbol": "CERCr", | |
"name": "Elemento6", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C4kmKzQ8o6NAP8pToERJF6C7V4PjCVE3o2oSrp24f5GP/logo.png", | |
"extensions": { | |
"website": "https://respectfuldevelopmentpanama.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6CuCUCYovcLxwaKuxWm8uTquVKGWaAydcFEU3NrtvxGZ", | |
"symbol": "INTC", | |
"name": "Intel Corp", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6CuCUCYovcLxwaKuxWm8uTquVKGWaAydcFEU3NrtvxGZ/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?INTC" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "iVNcrNE9BRZBC9Aqf753iZiZfbszeAVUoikgT9yvr2a", | |
"symbol": "IVN", | |
"name": "Investin Protocol", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/iVNcrNE9BRZBC9Aqf753iZiZfbszeAVUoikgT9yvr2a/logo.png", | |
"tags": [ | |
"defi", | |
"fund-management" | |
], | |
"extensions": { | |
"coingeckoId": "investin", | |
"discord": "https://discord.com/invite/Yf54h9B", | |
"medium": "https://medium.com/investin-pro", | |
"serumV3Usdc": "AdmfUBJ64BTsjaZdtu1iQHAtxJ4Ge7Zw5bNMsrLGdZu7", | |
"telegram": "https://t.me/Investin_pro1", | |
"twitter": "https://twitter.com/Investin_pro", | |
"website": "https://www.investin.pro/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BTk1SU7EM3sv7u8iaeUjJahm5oeXhEFeC3GJ3KqjTkGL", | |
"symbol": "RDP", | |
"name": "Road Protocol", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTk1SU7EM3sv7u8iaeUjJahm5oeXhEFeC3GJ3KqjTkGL/logo.svg", | |
"extensions": { | |
"telegram": "https://t.me/roadprotocol", | |
"twitter": "https://twitter.com/roadprotocol", | |
"website": "https://roadprotocol.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7kWEmnn8sCDnB3gDyeNss8Jo8tgj7i3yHyKrYjbXV6Jd", | |
"symbol": "WENA", | |
"name": "WENATURE", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7kWEmnn8sCDnB3gDyeNss8Jo8tgj7i3yHyKrYjbXV6Jd/logo.png", | |
"extensions": { | |
"twitter": "https://twitter.com/wenacurrency", | |
"website": "https://wena.finance" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6H26K637YNAjZycRosvBR3ENKFGMsbr4xmoV7ca83GWf", | |
"symbol": "JUST", | |
"name": "Just Group PLC", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6H26K637YNAjZycRosvBR3ENKFGMsbr4xmoV7ca83GWf/logo.png", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?JUST" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FFRtWiE8FT7HMf673r9cmpabHVQfa2QEf4rSRwNo4JM3", | |
"symbol": "MRNA", | |
"name": "Moderna", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFRtWiE8FT7HMf673r9cmpabHVQfa2QEf4rSRwNo4JM3/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?MRNA" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Hfbh3GU8AdYCw4stirFy2RPGtwQbbzToG2DgFozAymUb", | |
"symbol": "NFLX", | |
"name": "Netflix", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hfbh3GU8AdYCw4stirFy2RPGtwQbbzToG2DgFozAymUb/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?NFLX" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "56Zwe8Crm4pXvmByCxmGDjYrLPxkenTrckdRM7WG3zQv", | |
"symbol": "NIO", | |
"name": "Nio", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/56Zwe8Crm4pXvmByCxmGDjYrLPxkenTrckdRM7WG3zQv/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?NIO" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HP9WMRDV3KdUfJ7CNn5Wf8JzLczwxdnQYTHDAa9yCSnq", | |
"symbol": "NOK", | |
"name": "Nokia", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HP9WMRDV3KdUfJ7CNn5Wf8JzLczwxdnQYTHDAa9yCSnq/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?NOK" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GpM58T33eTrGEdHmeFnSVksJjJT6JVdTvim59ipTgTNh", | |
"symbol": "NVDA", | |
"name": "NVIDIA", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GpM58T33eTrGEdHmeFnSVksJjJT6JVdTvim59ipTgTNh/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?NVDA" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CRCop5kHBDLTYJyG7z3u6yiVQi4FQHbyHdtb18Qh2Ta9", | |
"symbol": "PENN", | |
"name": "Penn National Gaming", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CRCop5kHBDLTYJyG7z3u6yiVQi4FQHbyHdtb18Qh2Ta9/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?PENN" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "97v2oXMQ2MMAkgUnoQk3rNhrZCRThorYhvz1poAe9stk", | |
"symbol": "PFE", | |
"name": "Pfizer", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97v2oXMQ2MMAkgUnoQk3rNhrZCRThorYhvz1poAe9stk/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?PFE" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AwutBmwmhehaMh18CxqFPPN311uCB1M2awp68A2bG41v", | |
"symbol": "PYPL", | |
"name": "PayPal", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AwutBmwmhehaMh18CxqFPPN311uCB1M2awp68A2bG41v/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?PYPL" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8Sa7BjogSJnkHyhtRTKNDDTDtASnWMcAsD4ySVNSFu27", | |
"symbol": "SLV", | |
"name": "iShares Silver Trust", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Sa7BjogSJnkHyhtRTKNDDTDtASnWMcAsD4ySVNSFu27/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?SLV" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CS4tNS523VCLiTsGnYEAd6GqfrZNLtA14C98DC6gE47g", | |
"symbol": "SPY", | |
"name": "SPDR S\u0026P 500 ETF", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CS4tNS523VCLiTsGnYEAd6GqfrZNLtA14C98DC6gE47g/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?SPY" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BLyrWJuDyYnDaUMxqBMqkDYAeajnyode1ARh7TxtakEh", | |
"symbol": "SQ", | |
"name": "Square", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BLyrWJuDyYnDaUMxqBMqkDYAeajnyode1ARh7TxtakEh/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?SQ" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HSDepE3xvbyRDx4M11LX7Hf9qgHSopfTXxAoeatCcwWF", | |
"symbol": "SUN", | |
"name": "Sunoco LP", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HSDepE3xvbyRDx4M11LX7Hf9qgHSopfTXxAoeatCcwWF/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?SUN" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "LZufgu7ekMcWBUypPMBYia2ipnFzpxpZgRBFLhYswgR", | |
"symbol": "TLRY", | |
"name": "Tilray Inc", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LZufgu7ekMcWBUypPMBYia2ipnFzpxpZgRBFLhYswgR/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?TLRY" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2iCUKaCQpGvnaBimLprKWT8bNGF92e6LxWq4gjsteWfx", | |
"symbol": "TSM", | |
"name": "Taiwan Semiconductor Mfg", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2iCUKaCQpGvnaBimLprKWT8bNGF92e6LxWq4gjsteWfx/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?TSM" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "H8Z1JgxqUpyHrerDVbXQ2HdjKuSTAWEZSeLTo4smWdF2", | |
"symbol": "CPT", | |
"name": "CryptoPotes Token", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H8Z1JgxqUpyHrerDVbXQ2HdjKuSTAWEZSeLTo4smWdF2/logo.svg", | |
"tags": [ | |
"social-token", | |
"community-token" | |
], | |
"extensions": { | |
"telegram": "https://t.me/+EWjQtq9l3GBjYzc0" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BZMg4HyyHVUJkwh2yuv6duu4iQUaXRxT6sK1dT7FcaZf", | |
"symbol": "TUR", | |
"name": "iShares MSCI Turkey ETF", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZMg4HyyHVUJkwh2yuv6duu4iQUaXRxT6sK1dT7FcaZf/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?TUR" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "C2tNm8bMU5tz6KdXjHY5zewsN1Wv1TEbxK9XGTCgUZMJ", | |
"symbol": "TWTR", | |
"name": "Twitter", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C2tNm8bMU5tz6KdXjHY5zewsN1Wv1TEbxK9XGTCgUZMJ/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?TWTR" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4kmVbBDCzYam3S4e9XqKQkLCEz16gu3dTTo65KbhShuv", | |
"symbol": "UBER", | |
"name": "Uber", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4kmVbBDCzYam3S4e9XqKQkLCEz16gu3dTTo65KbhShuv/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?UBER" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "J645gMdx9zSMM2VySLBrtv6Zv1HyEjPqQXVGRAPYqzvK", | |
"symbol": "USO", | |
"name": "United States Oil Fund", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J645gMdx9zSMM2VySLBrtv6Zv1HyEjPqQXVGRAPYqzvK/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?USO" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3LjkoC9FYEqRKNpy7xz3nxfnGVAt1SNS98rYwF2adQWB", | |
"symbol": "VXX", | |
"name": "iPath B S\u0026P 500 VIX S/T Futs ETN", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3LjkoC9FYEqRKNpy7xz3nxfnGVAt1SNS98rYwF2adQWB/logo.png", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?VXX" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BcALTCjD4HJJxBDUXi3nHUgqsJmXAQdBbQrcmtLtqZaf", | |
"symbol": "ZM", | |
"name": "Zoom", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BcALTCjD4HJJxBDUXi3nHUgqsJmXAQdBbQrcmtLtqZaf/logo.svg", | |
"tags": [ | |
"tokenized-stock" | |
], | |
"extensions": { | |
"website": "https://www.digitalassets.ag/UnderlyingDetails?ZM" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", | |
"symbol": "BTC", | |
"name": "Wrapped Bitcoin (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "bitcoin", | |
"serumV3Usdc": "A8YFbxQYFVqKZaoYJLLUVcQiWP7G2MeEgW5wsAQgMvFw", | |
"serumV3Usdt": "C1EuT9VokAKLiW7i2ASnZUvxDoKuKkCpDDeNxAptuNe4" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk", | |
"symbol": "soETH", | |
"name": "Wrapped Ethereum (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "ethereum", | |
"serumV3Usdc": "4tSvZvnbyzHXLMTiFonMyxZoHmFqau1XArcRCVHLZ5gX", | |
"serumV3Usdt": "7dLVkUfBVfCGkFhSXDCq1ukM9usathSgS716t643iFGF" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3JSf5tPeuscJGtaCp5giEiDhv51gQ4v3zWg8DGgyLfAB", | |
"symbol": "soYFI", | |
"name": "Wrapped YFI (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3JSf5tPeuscJGtaCp5giEiDhv51gQ4v3zWg8DGgyLfAB/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "yearn-finance", | |
"serumV3Usdc": "7qcCo8jqepnjjvB5swP4Afsr3keVBs6gNpBTNubd1Kr2", | |
"serumV3Usdt": "3Xg9Q4VtZhD4bVYJbTfgGWFV5zjE3U7ztSHa938zizte" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG", | |
"symbol": "soLINK", | |
"name": "Wrapped Chainlink (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "chainlink", | |
"serumV3Usdc": "3hwH1txjJVS8qv588tWrjHfRxdqNjBykM1kMcit484up", | |
"serumV3Usdt": "3yEZ9ZpXSQapmKjLAGKZEzUNA1rcupJtsDp5mPBWmGZR" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Ga2AXHpfAF6mv2ekZwcsJFqu7wB4NV331qNH7fW9Nst8", | |
"symbol": "XRP", | |
"name": "Wrapped XRP (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ga2AXHpfAF6mv2ekZwcsJFqu7wB4NV331qNH7fW9Nst8/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "ripple" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4", | |
"symbol": "soUSDT", | |
"name": "Wrapped USDT (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4/logo.png", | |
"tags": [ | |
"stablecoin", | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "tether" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AR1Mtgh7zAtxuxGd2XPovXPVjcSdY3i4rQYisNadjfKy", | |
"symbol": "soSUSHI", | |
"name": "Wrapped SUSHI (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AR1Mtgh7zAtxuxGd2XPovXPVjcSdY3i4rQYisNadjfKy/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "sushi", | |
"serumV3Usdc": "A1Q9iJDVVS8Wsswr9ajeZugmj64bQVCYLZQLra2TMBMo", | |
"serumV3Usdt": "6DgQRTpJTnAYBSShngAVZZDq7j9ogRN1GfSQ3cq9tubW", | |
"waterfallbot": "https://bit.ly/SUSHIwaterfall", | |
"website": "https://www.sushi.com" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CsZ5LZkDS7h9TDKjrbL7VAwQZ9nsRu8vJLhRYfmGaN8K", | |
"symbol": "soALEPH", | |
"name": "Wrapped ALEPH (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CsZ5LZkDS7h9TDKjrbL7VAwQZ9nsRu8vJLhRYfmGaN8K/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "aleph", | |
"serumV3Usdc": "GcoKtAmTy5QyuijXSmJKBtFdt99e6Buza18Js7j9AJ6e", | |
"serumV3Usdt": "Gyp1UGRgbrb6z8t7fpssxEKQgEmcJ4pVnWW3ds2p6ZPY" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "SF3oTvfWzEP3DTwGSvUXRrGTvr75pdZNnBLAH9bzMuX", | |
"symbol": "soSXP", | |
"name": "Wrapped SXP (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SF3oTvfWzEP3DTwGSvUXRrGTvr75pdZNnBLAH9bzMuX/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "swipe", | |
"serumV3Usdc": "4LUro5jaPaTurXK737QAxgJywdhABnFAMQkXX4ZyqqaZ", | |
"serumV3Usdt": "8afKwzHR3wJE7W7Y5hvQkngXh6iTepSZuutRMMy96MjR" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BtZQfWqDGbk9Wf2rXEiWyQBdBY1etnUUn6zEphvVS7yN", | |
"symbol": "soHGET", | |
"name": "Wrapped Hedget (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BtZQfWqDGbk9Wf2rXEiWyQBdBY1etnUUn6zEphvVS7yN/logo.svg", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "hedget", | |
"serumV3Usdc": "88vztw7RTN6yJQchVvxrs6oXUDryvpv9iJaFa1EEmg87", | |
"serumV3Usdt": "ErQXxiNfJgd4fqQ58PuEw5xY35TZG84tHT6FXf5s4UxY", | |
"website": "https://www.hedget.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5Fu5UUgbjpUvdBveb3a1JTNirL8rXtiYeSMWvKjtUNQv", | |
"symbol": "soCREAM", | |
"name": "Wrapped Cream Finance (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Fu5UUgbjpUvdBveb3a1JTNirL8rXtiYeSMWvKjtUNQv/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "cream-2", | |
"serumV3Usdc": "7nZP6feE94eAz9jmfakNJWPwEKaeezuKKC5D1vrnqyo2", | |
"serumV3Usdt": "4ztJEvQyryoYagj2uieep3dyPwG2pyEwb2dKXTwmXe82" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "873KLxCbz7s9Kc4ZzgYRtNmhfkQrhfyWGZJBmyCbC3ei", | |
"symbol": "soUBXT", | |
"name": "Wrapped Upbots (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/873KLxCbz7s9Kc4ZzgYRtNmhfkQrhfyWGZJBmyCbC3ei/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"coingeckoId": "upbots", | |
"serumV3Usdc": "2wr3Ab29KNwGhtzr5HaPCyfU1qGJzTUAN4amCLZWaD1H", | |
"serumV3Usdt": "F1T7b6pnR8Pge3qmfNUfW6ZipRDiGpMww6TKTrRU4NiL", | |
"website": "https://upbots.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HqB7uswoVg4suaQiDP3wjxob1G5WdZ144zhdStwMCq7e", | |
"symbol": "soHNT", | |
"name": "Wrapped Helium (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HqB7uswoVg4suaQiDP3wjxob1G5WdZ144zhdStwMCq7e/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "helium", | |
"serumV3Usdc": "CnUV42ZykoKUnMDdyefv5kP6nDSJf7jFd7WXAecC6LYr", | |
"serumV3Usdt": "8FpuMGLtMZ7Wt9ZvyTGuTVwTwwzLYfS5NZWcHxbP1Wuh" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9S4t2NEAiJVMvPdRYKVrfJpBafPBLtvbvyS3DecojQHw", | |
"symbol": "soFRONT", | |
"name": "Wrapped FRONT (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9S4t2NEAiJVMvPdRYKVrfJpBafPBLtvbvyS3DecojQHw/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "frontier-token", | |
"serumV3Usdc": "9Zx1CvxSVdroKMMWf2z8RwrnrLiQZ9VkQ7Ex3syQqdSH", | |
"serumV3Usdt": "CGC4UgWwqA9PET6Tfx6o6dLv94EK2coVkPtxgNHuBtxj" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6WNVCuxCGJzNjmMZoKyhZJwvJ5tYpsLyAtagzYASqBoF", | |
"symbol": "soAKRO", | |
"name": "Wrapped AKRO (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6WNVCuxCGJzNjmMZoKyhZJwvJ5tYpsLyAtagzYASqBoF/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "akropolis", | |
"serumV3Usdc": "5CZXTTgVZKSzgSA3AFMN5a2f3hmwmmJ6hU8BHTEJ3PX8", | |
"serumV3Usdt": "HLvRdctRB48F9yLnu9E24LUTRt89D48Z35yi1HcxayDf" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DJafV9qemGp7mLMEn5wrfqaFwxsbLgUsGVS16zKRk9kc", | |
"symbol": "soHXRO", | |
"name": "Wrapped HXRO (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DJafV9qemGp7mLMEn5wrfqaFwxsbLgUsGVS16zKRk9kc/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "hxro", | |
"serumV3Usdc": "6Pn1cSiRos3qhBf54uBP9ZQg8x3JTardm1dL3n4p29tA", | |
"serumV3Usdt": "4absuMsgemvdjfkgdLQq1zKEjw3dHBoCWkzKoctndyqd" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw", | |
"symbol": "soUNI", | |
"name": "Wrapped UNI (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "uniswap", | |
"serumV3Usdc": "6JYHjaQBx6AtKSSsizDMwozAEDEZ5KBsSUzH7kRjGJon", | |
"serumV3Usdt": "2SSnWNrc83otLpfRo792P6P3PESZpdr8cu2r8zCE6bMD" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt", | |
"symbol": "SRM", | |
"name": "Serum", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt/logo.png", | |
"extensions": { | |
"coingeckoId": "serum", | |
"serumV3Usdc": "ByRys5tuUWDgL73G8JBAEfkdFf8JWBzPBDHsBVQ5vbQA", | |
"serumV3Usdt": "AtNnsY1AyRERWJ8xCskfz38YdvruWVJQUVXgScC1iPb", | |
"waterfallbot": "https://bit.ly/SRMwaterfall", | |
"website": "https://projectserum.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3", | |
"symbol": "soFTT", | |
"name": "Wrapped FTT (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"assetContract": "https://etherscan.io/address/0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9", | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "ftx-token", | |
"serumV3Usdc": "2Pbh1CvRVku1TgewMfycemghf6sU9EyuFDcNXqvRmSxc", | |
"serumV3Usdt": "Hr3wzG8mZXNHV7TuL6YqtgfVUesCqMxGYCEyP3otywZE", | |
"waterfallbot": "https://bit.ly/FTTwaterfall" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "MSRMcoVyrFxnSgo5uXwone5SKcGhT1KEJMFEkMEWf9L", | |
"symbol": "MSRM", | |
"name": "MegaSerum", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MSRMcoVyrFxnSgo5uXwone5SKcGhT1KEJMFEkMEWf9L/logo.png", | |
"extensions": { | |
"coingeckoId": "megaserum", | |
"serumV3Usdc": "4VKLSYdvrQ5ngQrt1d2VS8o4ewvb2MMUZLiejbnGPV33", | |
"serumV3Usdt": "5nLJ22h1DUfeCfwbFxPYK8zbfbri7nA9bXoDcR8AcJjs", | |
"website": "https://projectserum.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BXXkv6z8ykpG1yuvUDPgh732wzVHB69RnB9YgSYh3itW", | |
"symbol": "soUSDC", | |
"name": "Wrapped USDC (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXXkv6z8ykpG1yuvUDPgh732wzVHB69RnB9YgSYh3itW/logo.png", | |
"tags": [ | |
"stablecoin", | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"coingeckoId": "usd-coin" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GXMvfY2jpQctDqZ9RoU3oWPhufKiCcFEfchvYumtX7jd", | |
"symbol": "soTOMO", | |
"name": "Wrapped TOMO (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GXMvfY2jpQctDqZ9RoU3oWPhufKiCcFEfchvYumtX7jd/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "tomochain", | |
"serumV3Usdc": "8BdpjpSD5n3nk8DQLqPUyTZvVqFu6kcff5bzUX5dqDpy", | |
"serumV3Usdt": "GnKPri4thaGipzTbp8hhSGSrHgG4F8MFiZVrbRn16iG2", | |
"waterfallbot": "https://t.me/TOMOwaterfall" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EcqExpGNFBve2i1cMJUTR4bPXj4ZoqmDD2rTkeCcaTFX", | |
"symbol": "soKARMA", | |
"name": "Wrapped KARMA (Sollet)", | |
"decimals": 4, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EcqExpGNFBve2i1cMJUTR4bPXj4ZoqmDD2rTkeCcaTFX/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "karma-dao" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EqWCKXfs3x47uVosDpTRgFniThL9Y8iCztJaapxbEaVX", | |
"symbol": "soLUA", | |
"name": "Wrapped LUA (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EqWCKXfs3x47uVosDpTRgFniThL9Y8iCztJaapxbEaVX/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "lua-token", | |
"serumV3Usdc": "4xyWjQ74Eifq17vbue5Ut9xfFNfuVB116tZLEpiZuAn8", | |
"serumV3Usdt": "35tV8UsHH8FnSAi3YFRrgCu4K9tb883wKnAXpnihot5r", | |
"waterfallbot": "https://t.me/LUAwaterfall" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GeDS162t9yGJuLEHPWXXGrb1zwkzinCgRwnT8vHYjKza", | |
"symbol": "soMATH", | |
"name": "Wrapped MATH (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GeDS162t9yGJuLEHPWXXGrb1zwkzinCgRwnT8vHYjKza/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "math", | |
"serumV3Usdc": "J7cPYBrXVy8Qeki2crZkZavcojf2sMRyQU7nx438Mf8t", | |
"serumV3Usdt": "2WghiBkDL2yRhHdvm8CpprrkmfguuQGJTCDfPSudKBAZ" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GUohe4DJUA5FKPWo3joiPgsB7yzer7LpDmt1Vhzy3Zht", | |
"symbol": "soKEEP", | |
"name": "Wrapped KEEP (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GUohe4DJUA5FKPWo3joiPgsB7yzer7LpDmt1Vhzy3Zht/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "keep-network", | |
"serumV3Usdc": "3rgacody9SvM88QR83GHaNdEEx4Fe2V2ed5GJp2oeKDr", | |
"serumV3Usdt": "HEGnaVL5i48ubPBqWAhodnZo8VsSLzEM3Gfc451DnFj9" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9F9fNTT6qwjsu4X4yWYKZpsbw5qT7o6yR2i57JF2jagy", | |
"symbol": "soSWAG", | |
"name": "Wrapped SWAG (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9F9fNTT6qwjsu4X4yWYKZpsbw5qT7o6yR2i57JF2jagy/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "swag-finance", | |
"serumV3Usdt": "J2XSt77XWim5HwtUM8RUwQvmRXNZsbMKpp5GTKpHafvf" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DgHK9mfhMtUwwv54GChRrU54T2Em5cuszq2uMuen1ZVE", | |
"symbol": "soCEL", | |
"name": "Wrapped Celsius (Sollet)", | |
"decimals": 4, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DgHK9mfhMtUwwv54GChRrU54T2Em5cuszq2uMuen1ZVE/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "celsius-degree-token", | |
"serumV3Usdt": "cgani53cMZgYfRMgSrNekJTMaLmccRfspsfTbXWRg7u" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7ncCLJpP3MNww17LW8bRvx8odQQnubNtfNZBL5BgAEHW", | |
"symbol": "soRSR", | |
"name": "Wrapped Reserve Rights (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ncCLJpP3MNww17LW8bRvx8odQQnubNtfNZBL5BgAEHW/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "reserve-rights-token", | |
"serumV3Usdt": "FcPet5fz9NLdbXwVM6kw2WTHzRAD7mT78UjwTpawd7hJ" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "ChvvzHyRqCHnLVwMNz8amvQwgVLD8AELV7RgcFAxEhAf", | |
"symbol": "DRIFT", | |
"name": "DriftCoin", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ChvvzHyRqCHnLVwMNz8amvQwgVLD8AELV7RgcFAxEhAf/logo.png", | |
"tags": [ | |
"social-token", | |
"utility-token" | |
], | |
"extensions": { | |
"discord": "https://discord.gg/stKm5E9SuF", | |
"telegram": "https://t.me/driftcoinorg", | |
"twitter": "https://twitter.com/driftcoinorg", | |
"website": "https://driftcoin.org" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GPF8ZZP6y1BkGAPLvmQCzkvVHvMUBko5e1pZzh8DD87Y", | |
"symbol": "BECH", | |
"name": "PrimeBech", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GPF8ZZP6y1BkGAPLvmQCzkvVHvMUBko5e1pZzh8DD87Y/logo.png", | |
"tags": [ | |
"community-token" | |
], | |
"extensions": { | |
"twitter": "https://twitter.com/doesitxz", | |
"website": "https://www.primebech.app" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3yN3xNcXxbhkZYC6MXak1f7Ff29BZdGyc4GUQ1jbyt27", | |
"symbol": "FRO", | |
"name": "Fro", | |
"decimals": 9, | |
"logoURI": "https://www.frolicx0.de/public/assets/pngs/logo.png", | |
"extensions": { | |
"website": "https://www.frolic.live/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5wihEYGca7X4gSe97C5mVcqNsfxBzhdTwpv72HKs25US", | |
"symbol": "so1INCH", | |
"name": "Wrapped 1INCH (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5wihEYGca7X4gSe97C5mVcqNsfxBzhdTwpv72HKs25US/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "1inch" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "38i2NQxjp5rt5B3KogqrxmBxgrAwaB3W1f1GmiKqh9MS", | |
"symbol": "soGRT", | |
"name": "Wrapped GRT (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/38i2NQxjp5rt5B3KogqrxmBxgrAwaB3W1f1GmiKqh9MS/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "the-graph" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Avz2fmevhhu87WYtWQCFj9UjKRjF9Z9QWwN2ih9yF95G", | |
"symbol": "soCOMP", | |
"name": "Wrapped Compound (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Avz2fmevhhu87WYtWQCFj9UjKRjF9Z9QWwN2ih9yF95G/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "compound-coin" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9wRD14AhdZ3qV8et3eBQVsrb3UoBZDUbJGyFckpTg8sj", | |
"symbol": "soPAXG", | |
"name": "Wrapped Paxos Gold (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9wRD14AhdZ3qV8et3eBQVsrb3UoBZDUbJGyFckpTg8sj/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "pax-gold" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AByXcTZwJHMtrKrvVsh9eFNB1pJaLDjCUR2ayvxBAAM2", | |
"symbol": "soSTRONG", | |
"name": "Wrapped Strong (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AByXcTZwJHMtrKrvVsh9eFNB1pJaLDjCUR2ayvxBAAM2/logo.png", | |
"tags": [ | |
"wrapped-sollet", | |
"ethereum" | |
], | |
"extensions": { | |
"bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", | |
"coingeckoId": "strong" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp", | |
"symbol": "FIDA", | |
"name": "Bonfida", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp/logo.svg", | |
"extensions": { | |
"coingeckoId": "bonfida", | |
"serumV3Usdc": "E14BKBhDWD4EuTkWj1ooZezesGxMW8LPCps4W5PuzZJo", | |
"serumV3Usdt": "EbV7pPpEvheLizuYX3gUCvWM8iySbSRAhu2mQ5Vz2Mxf", | |
"waterfallbot": "https://bit.ly/FIDAwaterfall", | |
"website": "https://bonfida.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6", | |
"symbol": "KIN", | |
"name": "KIN", | |
"decimals": 5, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6/logo.png", | |
"extensions": { | |
"coingeckoId": "kin", | |
"serumV3Usdc": "Bn6NPyr6UzrFAwC4WmvPvDr2Vm8XSUnFykM2aQroedgn", | |
"serumV3Usdt": "4nCFQr8sahhhL4XJ7kngGFBmpkmyf3xLzemuMhn6mWTm", | |
"waterfallbot": "https://bit.ly/KINwaterfall" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb", | |
"symbol": "MAPS", | |
"name": "MAPS", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb/logo.svg", | |
"extensions": { | |
"coingeckoId": "maps", | |
"serumV3Usdc": "3A8XQRWXC7BjLpgLDDBhQJLT5yPCzS16cGYRKHkKxvYo", | |
"serumV3Usdt": "7cknqHAuGpfVXPtFoJpFvUjJ8wkmyEfbFusmwMfNy3FE", | |
"website": "https://maps.me/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M", | |
"symbol": "OXY", | |
"name": "Oxygen Protocol", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M/logo.svg", | |
"extensions": { | |
"coingeckoId": "oxygen", | |
"serumV3Usdc": "GZ3WBFsqntmERPwumFEYgrX2B7J7G11MzNZAy7Hje27X", | |
"serumV3Usdt": "GKLev6UHeX1KSDCyo2bzyG6wqhByEzDBkmYTxEdmYJgB", | |
"waterfallbot": "https://bit.ly/OXYwaterfall", | |
"website": "https://www.oxygen.org/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FtgGSFADXBtroxq8VCausXRr2of47QBf5AS1NtZCu4GD", | |
"symbol": "BRZ", | |
"name": "BRZ", | |
"decimals": 4, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FtgGSFADXBtroxq8VCausXRr2of47QBf5AS1NtZCu4GD/logo.png", | |
"extensions": { | |
"coingeckoId": "brz", | |
"website": "https://brztoken.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", | |
"symbol": "USDT", | |
"name": "USDT", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB/logo.svg", | |
"tags": [ | |
"stablecoin" | |
], | |
"extensions": { | |
"coingeckoId": "tether", | |
"serumV3Usdc": "77quYg4MGneUdjgXCunt9GgM1usmrxKY31twEy3WHwcS", | |
"website": "https://tether.to/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2oDxYGgTBmST4rc3yn1YtcSEck7ReDZ8wHWLqZAuNWXH", | |
"symbol": "wxMARK_v1", | |
"name": "Standard (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2oDxYGgTBmST4rc3yn1YtcSEck7ReDZ8wHWLqZAuNWXH/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x36b679bd64ed73dbfd88909cdcb892cb66bd4cbb", | |
"assetContract": "https://etherscan.io/address/0x36b679bd64ed73dbfd88909cdcb892cb66bd4cbb", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "xmark", | |
"website": "https://benchmarkprotocol.finance/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R", | |
"symbol": "RAY", | |
"name": "Raydium", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R/logo.png", | |
"extensions": { | |
"coingeckoId": "raydium", | |
"serumV3Usdc": "2xiv8A5xrJ7RnGdxXB42uFEkYHJjszEhaJyKKt4WaLep", | |
"serumV3Usdt": "teE55QrL4a4QSfydR9dnHF97jgCfptpuigbb53Lo95g", | |
"waterfallbot": "https://bit.ly/RAYwaterfall", | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CzPDyvotTcxNqtPne32yUiEVQ6jk42HZi1Y3hUu7qf7f", | |
"symbol": "RAY-WUSDT", | |
"name": "Raydium Legacy LP Token V2 (RAY-WUSDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CzPDyvotTcxNqtPne32yUiEVQ6jk42HZi1Y3hUu7qf7f/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "134Cct3CSdRCbYgq5SkwmHgfwjJ7EM5cG9PzqffWqECx", | |
"symbol": "RAY-SOL", | |
"name": "Raydium Legacy LP Token V2 (RAY-SOL)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/134Cct3CSdRCbYgq5SkwmHgfwjJ7EM5cG9PzqffWqECx/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EVDmwajM5U73PD34bYPugwiA4Eqqbrej4mLXXv15Z5qR", | |
"symbol": "LINK-WUSDT", | |
"name": "Raydium Legacy LP Token V2 (LINK-WUSDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EVDmwajM5U73PD34bYPugwiA4Eqqbrej4mLXXv15Z5qR/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "KY4XvwHy7JPzbWYAbk23jQvEb4qWJ8aCqYWREmk1Q7K", | |
"symbol": "ETH-WUSDT", | |
"name": "Raydium Legacy LP Token V2 (ETH-WUSDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KY4XvwHy7JPzbWYAbk23jQvEb4qWJ8aCqYWREmk1Q7K/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FgmBnsF5Qrnv8X9bomQfEtQTQjNNiBCWRKGpzPnE5BDg", | |
"symbol": "RAY-USDC", | |
"name": "Raydium Legacy LP Token V2 (RAY-USDC)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgmBnsF5Qrnv8X9bomQfEtQTQjNNiBCWRKGpzPnE5BDg/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5QXBMXuCL7zfAk39jEVVEvcrz1AvBGgT9wAhLLHLyyUJ", | |
"symbol": "RAY-SRM", | |
"name": "Raydium Legacy LP Token V2 (RAY-SRM)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5QXBMXuCL7zfAk39jEVVEvcrz1AvBGgT9wAhLLHLyyUJ/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FdhKXYjCou2jQfgKWcNY7jb8F2DPLU1teTTTRfLBD2v1", | |
"symbol": "RAY-WUSDT", | |
"name": "Raydium Legacy LP Token V3 (RAY-WUSDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FdhKXYjCou2jQfgKWcNY7jb8F2DPLU1teTTTRfLBD2v1/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BZFGfXMrjG2sS7QT2eiCDEevPFnkYYF7kzJpWfYxPbcx", | |
"symbol": "RAY-USDC", | |
"name": "Raydium Legacy LP Token V3 (RAY-USDC)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZFGfXMrjG2sS7QT2eiCDEevPFnkYYF7kzJpWfYxPbcx/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DSX5E21RE9FB9hM8Nh8xcXQfPK6SzRaJiywemHBSsfup", | |
"symbol": "RAY-SRM", | |
"name": "Raydium Legacy LP Token V3 (RAY-SRM)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DSX5E21RE9FB9hM8Nh8xcXQfPK6SzRaJiywemHBSsfup/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "F5PPQHGcznZ2FxD9JaxJMXaf7XkaFFJ6zzTBcW8osQjw", | |
"symbol": "RAY-SOL", | |
"name": "Raydium Legacy LP Token V3 (RAY-SOL)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F5PPQHGcznZ2FxD9JaxJMXaf7XkaFFJ6zzTBcW8osQjw/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8Q6MKy5Yxb9vG1mWzppMtMb2nrhNuCRNUkJTeiE3fuwD", | |
"symbol": "RAY-ETH", | |
"name": "Raydium Legacy LP Token V3 (RAY-ETH)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Q6MKy5Yxb9vG1mWzppMtMb2nrhNuCRNUkJTeiE3fuwD/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DsBuznXRTmzvEdb36Dx3aVLVo1XmH7r1PRZUFugLPTFv", | |
"symbol": "FIDA-RAY", | |
"name": "Raydium LP Token V4 (FIDA-RAY)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DsBuznXRTmzvEdb36Dx3aVLVo1XmH7r1PRZUFugLPTFv/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FwaX9W7iThTZH5MFeasxdLpxTVxRcM7ZHieTCnYog8Yb", | |
"symbol": "OXY-RAY", | |
"name": "Raydium LP Token V4 (OXY-RAY)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FwaX9W7iThTZH5MFeasxdLpxTVxRcM7ZHieTCnYog8Yb/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CcKK8srfVdTSsFGV3VLBb2YDbzF4T4NM2C3UEjC39RLP", | |
"symbol": "MAPS-RAY", | |
"name": "Raydium LP Token V4 (MAPS-RAY)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CcKK8srfVdTSsFGV3VLBb2YDbzF4T4NM2C3UEjC39RLP/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CHT8sft3h3gpLYbCcZ9o27mT5s3Z6VifBVbUiDvprHPW", | |
"symbol": "KIN-RAY", | |
"name": "Raydium LP Token V4 (KIN-RAY)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHT8sft3h3gpLYbCcZ9o27mT5s3Z6VifBVbUiDvprHPW/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "C3sT1R3nsw4AVdepvLTLKr5Gvszr7jufyBWUCvy4TUvT", | |
"symbol": "RAY-USDT", | |
"name": "Raydium LP Token V4 (RAY-USDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C3sT1R3nsw4AVdepvLTLKr5Gvszr7jufyBWUCvy4TUvT/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8HoQnePLqPj4M7PUDzfw8e3Ymdwgc7NLGnaTUapubyvu", | |
"symbol": "SOL-USDC", | |
"name": "Raydium LP Token V4 (SOL-USDC)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8HoQnePLqPj4M7PUDzfw8e3Ymdwgc7NLGnaTUapubyvu/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "865j7iMmRRycSYUXzJ33ZcvLiX9JHvaLidasCyUyKaRE", | |
"symbol": "YFI-USDC", | |
"name": "Raydium LP Token V4 (YFI-USDC)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/865j7iMmRRycSYUXzJ33ZcvLiX9JHvaLidasCyUyKaRE/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9XnZd82j34KxNLgQfz29jGbYdxsYznTWRpvZE3SRE7JG", | |
"symbol": "SRM-USDC", | |
"name": "Raydium LP Token V4 (SRM-USDC)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9XnZd82j34KxNLgQfz29jGbYdxsYznTWRpvZE3SRE7JG/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "75dCoKfUHLUuZ4qEh46ovsxfgWhB4icc3SintzWRedT9", | |
"symbol": "FTT-USDC", | |
"name": "Raydium LP Token V4 (FTT-USDC)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/75dCoKfUHLUuZ4qEh46ovsxfgWhB4icc3SintzWRedT9/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2hMdRdVWZqetQsaHG8kQjdZinEMBz75vsoWTCob1ijXu", | |
"symbol": "BTC-USDC", | |
"name": "Raydium LP Token V4 (BTC-USDC)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2hMdRdVWZqetQsaHG8kQjdZinEMBz75vsoWTCob1ijXu/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2QVjeR9d2PbSf8em8NE8zWd8RYHjFtucDUdDgdbDD2h2", | |
"symbol": "SUSHI-USDC", | |
"name": "Raydium LP Token V4 (SUSHI-USDC)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2QVjeR9d2PbSf8em8NE8zWd8RYHjFtucDUdDgdbDD2h2/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CHyUpQFeW456zcr5XEh4RZiibH8Dzocs6Wbgz9aWpXnQ", | |
"symbol": "TOMO-USDC", | |
"name": "Raydium LP Token V4 (TOMO-USDC)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHyUpQFeW456zcr5XEh4RZiibH8Dzocs6Wbgz9aWpXnQ/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BqjoYjqKrXtfBKXeaWeAT5sYCy7wsAYf3XjgDWsHSBRs", | |
"symbol": "LINK-USDC", | |
"name": "Raydium LP Token V4 (LINK-USDC)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BqjoYjqKrXtfBKXeaWeAT5sYCy7wsAYf3XjgDWsHSBRs/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "13PoKid6cZop4sj2GfoBeujnGfthUbTERdE5tpLCDLEY", | |
"symbol": "ETH-USDC", | |
"name": "Raydium LP Token V4 (ETH-USDC)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/13PoKid6cZop4sj2GfoBeujnGfthUbTERdE5tpLCDLEY/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2Vyyeuyd15Gp8aH6uKE72c4hxc8TVSLibxDP9vzspQWG", | |
"symbol": "COPE-USDC", | |
"name": "Raydium LP Token V4 (COPE-USDC)", | |
"decimals": 0, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Vyyeuyd15Gp8aH6uKE72c4hxc8TVSLibxDP9vzspQWG/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Epm4KfTj4DMrvqn6Bwg2Tr2N8vhQuNbuK8bESFp4k33K", | |
"symbol": "SOL-USDT", | |
"name": "Raydium LP Token V4 (SOL-USDT)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Epm4KfTj4DMrvqn6Bwg2Tr2N8vhQuNbuK8bESFp4k33K/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FA1i7fej1pAbQbnY8NbyYUsTrWcasTyipKreDgy1Mgku", | |
"symbol": "YFI-USDT", | |
"name": "Raydium LP Token V4 (YFI-USDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FA1i7fej1pAbQbnY8NbyYUsTrWcasTyipKreDgy1Mgku/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HYSAu42BFejBS77jZAZdNAWa3iVcbSRJSzp3wtqCbWwv", | |
"symbol": "SRM-USDT", | |
"name": "Raydium LP Token V4 (SRM-USDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HYSAu42BFejBS77jZAZdNAWa3iVcbSRJSzp3wtqCbWwv/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2cTCiUnect5Lap2sk19xLby7aajNDYseFhC9Pigou11z", | |
"symbol": "FTT-USDT", | |
"name": "Raydium LP Token V4 (FTT-USDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2cTCiUnect5Lap2sk19xLby7aajNDYseFhC9Pigou11z/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DgGuvR9GSHimopo3Gc7gfkbKamLKrdyzWkq5yqA6LqYS", | |
"symbol": "BTC-USDT", | |
"name": "Raydium LP Token V4 (BTC-USDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DgGuvR9GSHimopo3Gc7gfkbKamLKrdyzWkq5yqA6LqYS/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Ba26poEYDy6P2o95AJUsewXgZ8DM9BCsmnU9hmC9i4Ki", | |
"symbol": "SUSHI-USDT", | |
"name": "Raydium LP Token V4 (SUSHI-USDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ba26poEYDy6P2o95AJUsewXgZ8DM9BCsmnU9hmC9i4Ki/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "D3iGro1vn6PWJXo9QAPj3dfta6dKkHHnmiiym2EfsAmi", | |
"symbol": "TOMO-USDT", | |
"name": "Raydium LP Token V4 (TOMO-USDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D3iGro1vn6PWJXo9QAPj3dfta6dKkHHnmiiym2EfsAmi/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Dr12Sgt9gkY8WU5tRkgZf1TkVWJbvjYuPAhR3aDCwiiX", | |
"symbol": "LINK-USDT", | |
"name": "Raydium LP Token V4 (LINK-USDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dr12Sgt9gkY8WU5tRkgZf1TkVWJbvjYuPAhR3aDCwiiX/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "nPrB78ETY8661fUgohpuVusNCZnedYCgghzRJzxWnVb", | |
"symbol": "ETH-USDT", | |
"name": "Raydium LP Token V4 (ETH-USDT)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/nPrB78ETY8661fUgohpuVusNCZnedYCgghzRJzxWnVb/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EGJht91R7dKpCj8wzALkjmNdUUUcQgodqWCYweyKcRcV", | |
"symbol": "YFI-SRM", | |
"name": "Raydium LP Token V4 (YFI-SRM)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EGJht91R7dKpCj8wzALkjmNdUUUcQgodqWCYweyKcRcV/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AsDuPg9MgPtt3jfoyctUCUgsvwqAN6RZPftqoeiPDefM", | |
"symbol": "FTT-SRM", | |
"name": "Raydium LP Token V4 (FTT-SRM)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AsDuPg9MgPtt3jfoyctUCUgsvwqAN6RZPftqoeiPDefM/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AGHQxXb3GSzeiLTcLtXMS2D5GGDZxsB2fZYZxSB5weqB", | |
"symbol": "BTC-SRM", | |
"name": "Raydium LP Token V4 (BTC-SRM)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AGHQxXb3GSzeiLTcLtXMS2D5GGDZxsB2fZYZxSB5weqB/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3HYhUnUdV67j1vn8fu7ExuVGy5dJozHEyWvqEstDbWwE", | |
"symbol": "SUSHI-SRM", | |
"name": "Raydium LP Token V4 (SUSHI-SRM)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3HYhUnUdV67j1vn8fu7ExuVGy5dJozHEyWvqEstDbWwE/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GgH9RnKrQpaMQeqmdbMvs5oo1A24hERQ9wuY2pSkeG7x", | |
"symbol": "TOMO-SRM", | |
"name": "Raydium LP Token V4 (TOMO-SRM)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GgH9RnKrQpaMQeqmdbMvs5oo1A24hERQ9wuY2pSkeG7x/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GXN6yJv12o18skTmJXaeFXZVY1iqR18CHsmCT8VVCmDD", | |
"symbol": "LINK-SRM", | |
"name": "Raydium LP Token V4 (LINK-SRM)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GXN6yJv12o18skTmJXaeFXZVY1iqR18CHsmCT8VVCmDD/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9VoY3VERETuc2FoadMSYYizF26mJinY514ZpEzkHMtwG", | |
"symbol": "ETH-SRM", | |
"name": "Raydium LP Token V4 (ETH-SRM)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9VoY3VERETuc2FoadMSYYizF26mJinY514ZpEzkHMtwG/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AKJHspCwDhABucCxNLXUSfEzb7Ny62RqFtC9uNjJi4fq", | |
"symbol": "SRM-SOL", | |
"name": "Raydium LP Token V4 (SRM-SOL)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AKJHspCwDhABucCxNLXUSfEzb7Ny62RqFtC9uNjJi4fq/logo.png", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2doeZGLJyACtaG9DCUyqMLtswesfje1hjNA11hMdj6YU", | |
"symbol": "TULIP-USDC", | |
"name": "Raydium LP Token V4 (TULIP-USDC)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2doeZGLJyACtaG9DCUyqMLtswesfje1hjNA11hMdj6YU/logo.svg", | |
"tags": [ | |
"lp-token" | |
], | |
"extensions": { | |
"website": "https://raydium.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AcstFzGGawvvdVhYV9bftr7fmBHbePUjhv53YK1W3dZo", | |
"symbol": "LSD", | |
"name": "LSD", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AcstFzGGawvvdVhYV9bftr7fmBHbePUjhv53YK1W3dZo/logo.svg", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "91fSFQsPzMLat9DHwLdQacW3i3EGnWds5tA5mt7yLiT9", | |
"symbol": "Unlimited Energy", | |
"name": "Unlimited Energy", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "29PEpZeuqWf9tS2gwCjpeXNdXLkaZSMR2s1ibkvGsfnP", | |
"symbol": "Need for Speed", | |
"name": "Need for Speed", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HsY8PNar8VExU335ZRYzg89fX7qa4upYu6vPMPFyCDdK", | |
"symbol": "ADOR OPENS", | |
"name": "ADOR OPENS", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EDP8TpLJ77M3KiDgFkZW4v4mhmKJHZi9gehYXenfFZuL", | |
"symbol": "CMS - Rare", | |
"name": "CMS - Rare", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BrUKFwAABkExb1xzYU4NkRWzjBihVQdZ3PBz4m5S8if3", | |
"symbol": "Tesla", | |
"name": "Tesla", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9CmQwpvVXRyixjiE3LrbSyyopPZohNDN1RZiTk8rnXsQ", | |
"symbol": "DeceFi", | |
"name": "DeceFi", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "F6ST1wWkx2PeH45sKmRxo1boyuzzWCfpnvyKL4BGeLxF", | |
"symbol": "Power User", | |
"name": "Power User", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "dZytJ7iPDcCu9mKe3srL7bpUeaR3zzkcVqbtqsmxtXZ", | |
"symbol": "VIP Member", | |
"name": "VIP Member", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8T4vXgwZUWwsbCDiptHFHjdfexvLG9UP8oy1psJWEQdS", | |
"symbol": "Uni Christmas", | |
"name": "Uni Christmas", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EjFGGJSyp9UDS8aqafET5LX49nsG326MeNezYzpiwgpQ", | |
"symbol": "BNB", | |
"name": "BNB", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FkmkTr4en8CXkfo9jAwEMov6PVNLpYMzWr3Udqf9so8Z", | |
"symbol": "Seldom", | |
"name": "Seldom", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2gn1PJdMAU92SU5inLSp4Xp16ZC5iLF6ScEi7UBvp8ZD", | |
"symbol": "Satoshi Closeup", | |
"name": "Satoshi Closeup", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7mhZHtPL4GFkquQR4Y6h34Q8hNkQvGc1FaNtyE43NvUR", | |
"symbol": "Satoshi GB", | |
"name": "Satoshi GB", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8RoKfLx5RCscbtVh8kYb81TF7ngFJ38RPomXtUREKsT2", | |
"symbol": "Satoshi OG", | |
"name": "Satoshi OG", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9rw5hyDngBQ3yDsCRHqgzGHERpU2zaLh1BXBUjree48J", | |
"symbol": "Satoshi BTC", | |
"name": "Satoshi BTC", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AiD7J6D5Hny5DJB1MrYBc2ePQqy2Yh4NoxWwYfR7PzxH", | |
"symbol": "Satoshi GB", | |
"name": "Satoshi GB", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4qzEcYvT6TuJME2EMZ5vjaLvQja6R4hKjarA73WQUwt6", | |
"symbol": "APESZN_HOODIE", | |
"name": "APESZN_HOODIE", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "APhyVWtzjdTVYhyta9ngSiCDk2pLi8eEZKsHGSbsmwv6", | |
"symbol": "APESZN_TEE_SHIRT", | |
"name": "APESZN_TEE_SHIRT", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "bxiA13fpU1utDmYuUvxvyMT8odew5FEm96MRv7ij3eb", | |
"symbol": "Satoshi", | |
"name": "Satoshi", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GoC24kpj6TkvjzspXrjSJC2CVb5zMWhLyRcHJh9yKjRF", | |
"symbol": "Satoshi Closeup", | |
"name": "Satoshi Closeup", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "oCUduD44ETuZ65bpWdPzPDSnAdreg1sJrugfwyFZVHV", | |
"symbol": "Satoshi BTC", | |
"name": "Satoshi BTC", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9Vvre2DxBB9onibwYDHeMsY1cj6BDKtEDccBPWRN215E", | |
"symbol": "Satoshi Nakamoto", | |
"name": "Satoshi Nakamoto", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7RpFk44cMTAUt9CcjEMWnZMypE9bYQsjBiSNLn5qBvhP", | |
"symbol": "Charles Hoskinson", | |
"name": "Charles Hoskinson", | |
"decimals": 9, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GyRkPAxpd9XrMHcBF6fYHVRSZQvQBwAGKAGQeBPSKzMq", | |
"symbol": "SBF", | |
"name": "SBF", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AgdBQN2Sy2abiZ2KToWeUsQ9PHdCv95wt6kVWRf5zDkx", | |
"symbol": "Bitcoin Tram", | |
"name": "Bitcoin Tram", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7TRzvCqXN8KSXggbSyeEG2Z9YBBhEFmbtmv6FLbd4mmd", | |
"symbol": "SRM tee-shirt", | |
"name": "SRM tee-shirt", | |
"decimals": 0, | |
"logoURI": "", | |
"tags": [ | |
"nft" | |
], | |
"extensions": { | |
"website": "https://solible.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "gksYzxitEf2HyE7Bb81vvHXNH5f3wa43jvXf4TcUZwb", | |
"symbol": "PERK", | |
"name": "PERK", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gksYzxitEf2HyE7Bb81vvHXNH5f3wa43jvXf4TcUZwb/logo.png", | |
"extensions": { | |
"twitter": "https://twitter.com/PerkExchange", | |
"website": "https://perk.exchange/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "BDxWSxkMLW1nJ3VggamUKkEKrtCaVqzFxoDApM8HdBks", | |
"symbol": "BTSG", | |
"name": "BitSong", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDxWSxkMLW1nJ3VggamUKkEKrtCaVqzFxoDApM8HdBks/logo.png", | |
"extensions": { | |
"coingeckoId": "bitsong", | |
"website": "https://bitsong.io/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5ddiFxh3J2tcZHfn8uhGRYqu16P3FUvBfh8WoZPUHKW5", | |
"symbol": "EOSBEAR", | |
"name": "EOSBEAR", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-eos-token", | |
"serumV3Usdc": "2BQrJP599QVKRyHhyJ6oRrTPNUmPBgXxiBo2duvYdacy" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "qxxF6S62hmZF5bo46mS7C2qbBa87qRossAM78VzsDqi", | |
"symbol": "EOSBULL", | |
"name": "EOSBULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-eos-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2CDLbxeuqkLTLY3em6FFQgfBQV5LRnEsJJgcFCvWKNcS", | |
"symbol": "BNBBEAR", | |
"name": "BNBBEAR", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-bnb-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AfjHjdLibuXyvmz7PyTSc5KEcGBh43Kcu8Sr2tyDaJyt", | |
"symbol": "BNBBULL", | |
"name": "BNBBULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-bnb-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8kA1WJKoLTxtACNPkvW6UNufsrpxUY57tXZ9KmG9123t", | |
"symbol": "BSVBULL", | |
"name": "BSVBULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-bitcoin-sv-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2FGW8BVMu1EHsz2ZS9rZummDaq6o2DVrZZPw4KaAvDWh", | |
"symbol": "BSVBEAR", | |
"name": "BSVBEAR", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-bitcoin-sv-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8L9XGTMzcqS9p61zsR35t7qipwAXMYkD6disWoDFZiFT", | |
"symbol": "LTCBEAR", | |
"name": "LTCBEAR", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-litecoin-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "863ZRjf1J8AaVuCqypAdm5ktVyGYDiBTvD1MNHKrwyjp", | |
"symbol": "LTCBULL", | |
"name": "LTCBULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-litecoin-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GkSPaHdY2raetuYzsJYacHtrAtQUfWt64bpd1VzxJgSD", | |
"symbol": "BULL", | |
"name": "BULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-bitcoin-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "45vwTZSDFBiqCMRdtK4xiLCHEov8LJRW8GwnofG8HYyH", | |
"symbol": "BEAR", | |
"name": "BEAR", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-bitcoin-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2VTAVf1YCwamD3ALMdYHRMV5vPUCXdnatJH5f1khbmx6", | |
"symbol": "BCHBEAR", | |
"name": "BCHBEAR", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-bitcoin-cash-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "22xoSp66BDt4x4Q5xqxjaSnirdEyharoBziSFChkLFLy", | |
"symbol": "BCHBULL", | |
"name": "BCHBULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-bitcoin-cash-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CwChm6p9Q3yFrjzVeiLTTbsoJkooscof5SJYZc2CrNqG", | |
"symbol": "ETHBULL", | |
"name": "ETHBULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-ethereum-token", | |
"serumV3Usdt": "FuhKVt5YYCv7vXnADXtb7vqzYn82PJoap86q5wm8LX8Q" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Bvv9xLodFrvDFSno9Ud8SEh5zVtBDQQjnBty2SgMcJ2s", | |
"symbol": "ETHBEAR", | |
"name": "ETHBEAR", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-ethereum-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "HRhaNssoyv5tKFRcbPg69ULEbcD8DPv99GdXLcdkgc1A", | |
"symbol": "ALTBULL", | |
"name": "ALTBULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-altcoin-index-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9Mu1KmjBKTUWgpDoeTJ5oD7XFQmEiZxzspEd3TZGkavx", | |
"symbol": "ALTBEAR", | |
"name": "ALTBEAR", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-altcoin-index-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AYL1adismZ1U9pTuN33ahG4aYc5XTZQL4vKFx9ofsGWD", | |
"symbol": "BULLSHIT", | |
"name": "BULLSHIT", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-shitcoin-index-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5jqymuoXXVcUuJKrf1MWiHSqHyg2osMaJGVy69NsJWyP", | |
"symbol": "BEARSHIT", | |
"name": "BEARSHIT", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-shitcoin-index-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EL1aDTnLKjf4SaGpqtxJPyK94imSBr8fWDbcXjXQrsmj", | |
"symbol": "MIDBULL", | |
"name": "MIDBULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-midcap-index-token", | |
"serumV3Usdc": "8BBtLkoaEyavREriwGUudzAcihTH9SJLAPBbgb7QZe9y" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "2EPvVjHusU3ozoucmdhhnqv3HQtBsQmjTnSa87K91HkC", | |
"symbol": "MIDBEAR", | |
"name": "MIDBEAR", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-midcap-index-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8TCfJTyeqNBZqyDMY4VwDY7kdCCY7pcbJJ58CnKHkMu2", | |
"symbol": "LINKBEAR", | |
"name": "LINKBEAR", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-chainlink-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EsUoZMbACNMppdqdmuLCFLet8VXxt2h47N9jHCKwyaPz", | |
"symbol": "LINKBULL", | |
"name": "LINKBULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-chainlink-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "262cQHT3soHwzuo2oVSy5kAfHcFZ1Jjn8C1GRLcQNKA3", | |
"symbol": "XRPBULL", | |
"name": "XRPBULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-xrp-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5AX3ZyDN1rpamEzHpLfsJ5t6TyNECKSwPRfnzVHVuRFj", | |
"symbol": "YUMZ", | |
"name": "Food tasting Social Token", | |
"decimals": 9, | |
"logoURI": "https://cdn.jsdelivr.net/gh/yu-ming-chen/yumzToken/logo.JPG", | |
"tags": [ | |
"social-token", | |
"yumz" | |
] | |
}, | |
{ | |
"chainId": 101, | |
"address": "8sxtSswmQ7Lcd2GjK6am37Z61wJZjA2SzE7Luf7yaKBB", | |
"symbol": "XRPBEAR", | |
"name": "XRPBEAR", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bear" | |
], | |
"extensions": { | |
"coingeckoId": "3x-short-xrp-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "91z91RukFM16hyEUCXuwMQwp2BW3vanNG5Jh5yj6auiJ", | |
"symbol": "BVOL", | |
"name": "BVOL", | |
"decimals": 6, | |
"logoURI": "", | |
"extensions": { | |
"coingeckoId": "1x-long-btc-implied-volatility-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "5TY71D29Cyuk9UrsSxLXw2quJBpS7xDDFuFu2K9W7Wf9", | |
"symbol": "IBVOL", | |
"name": "IBlive", | |
"decimals": 6, | |
"logoURI": "", | |
"extensions": { | |
"coingeckoId": "1x-short-btc-implied-volatility" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "dK83wTVypEpa1pqiBbHY3MNuUnT3ADUZM4wk9VZXZEc", | |
"symbol": "soAAVE", | |
"name": "Wrapped Aave (Sollet)", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/dK83wTVypEpa1pqiBbHY3MNuUnT3ADUZM4wk9VZXZEc/logo.png", | |
"extensions": { | |
"coingeckoId": "aave", | |
"serumV3Usdt": "6bxuB5N3bt3qW8UnPNLgMMzDq5sEH8pFmYJYGgzvE11V" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "A6aY2ceogBz1VaXBxm1j2eJuNZMRqrWUAnKecrMH85zj", | |
"symbol": "LQID", | |
"name": "LQID", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A6aY2ceogBz1VaXBxm1j2eJuNZMRqrWUAnKecrMH85zj/logo.svg" | |
}, | |
{ | |
"chainId": 101, | |
"address": "7CnFGR9mZWyAtWxPcVuTewpyC3A3MDW4nLsu5NY6PDbd", | |
"symbol": "SECO", | |
"name": "SECO", | |
"decimals": 6, | |
"logoURI": "", | |
"extensions": { | |
"coingeckoId": "serum-ecosystem-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3GECTP7H4Tww3w8jEPJCJtXUtXxiZty31S9szs84CcwQ", | |
"symbol": "HOLY", | |
"name": "HOLY", | |
"decimals": 6, | |
"logoURI": "", | |
"extensions": { | |
"coingeckoId": "holy-trinity" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6ry4WBDvAwAnrYJVv6MCog4J8zx6S3cPgSqnTsDZ73AR", | |
"symbol": "TRYB", | |
"name": "TRYB", | |
"decimals": 6, | |
"logoURI": "", | |
"extensions": { | |
"coingeckoId": "bilira", | |
"serumV3Usdt": "AADohBGxvf7bvixs2HKC3dG2RuU3xpZDwaTzYFJThM8U" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "ASboaJPFtJeCS5eG4gL3Lg95xrTz2UZSLE9sdJtY93kE", | |
"symbol": "DOGEBULL", | |
"name": "DOGEBULL", | |
"decimals": 6, | |
"logoURI": "", | |
"tags": [ | |
"leveraged", | |
"bull" | |
], | |
"extensions": { | |
"coingeckoId": "3x-long-dogecoin-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Gnhy3boBT4MA8TTjGip5ND2uNsceh1Wgeaw1rYJo51ZY", | |
"symbol": "MAPSPOOL", | |
"name": "Bonfida Maps Pool", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gnhy3boBT4MA8TTjGip5ND2uNsceh1Wgeaw1rYJo51ZY/logo.svg", | |
"extensions": { | |
"website": "https://bonfida.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "9iDWyYZ5VHBCxxmWZogoY3Z6FSbKsX4WFe37c728krdT", | |
"symbol": "OXYPOOL", | |
"name": "Bonfida Oxy Pool", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9iDWyYZ5VHBCxxmWZogoY3Z6FSbKsX4WFe37c728krdT/logo.svg", | |
"extensions": { | |
"website": "https://bonfida.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "D68NB5JkzvyNCZAvi6EGtEcGvSoRNPanU9heYTAUFFRa", | |
"symbol": "PERP", | |
"name": "PERP", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D68NB5JkzvyNCZAvi6EGtEcGvSoRNPanU9heYTAUFFRa/logo.png", | |
"extensions": { | |
"coingeckoId": "perpetual-protocol" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4fiysjiegD8yoqHX75YXBvhBzmaUEQhyuAVRX8fGL3F1", | |
"symbol": "RAYPOOL", | |
"name": "Bonfida Ray Pool", | |
"decimals": 6, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/93a1L7xaEV7vZGzNXCcb9ztZedbpKgUiTHYxmFKJwKvc/logo.png", | |
"extensions": { | |
"website": "https://bonfida.com/" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf", | |
"symbol": "wWETH_v1", | |
"name": "Wrapped Ether (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", | |
"assetContract": "https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "ethereum" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FeLoyXk8ac2AYVmDhAWEKNWWT63Z9TczeidYbpDvxF3T", | |
"symbol": "wCAPS_v1", | |
"name": "Wrapped Capsule Coin (Wormhole v1)", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeLoyXk8ac2AYVmDhAWEKNWWT63Z9TczeidYbpDvxF3T/logo.svg", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x03be5c903c727ee2c8c4e9bc0acc860cca4715e2", | |
"assetContract": "https://etherscan.io/address/0x03be5c903c727ee2c8c4e9bc0acc860cca4715e2", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "coin-capsule", | |
"website": "https://www.ternoa.com/en" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GbBWwtYTMPis4VHb8MrBbdibPhn28TSrLB53KvUmb7Gi", | |
"symbol": "wFTT_v1", | |
"name": "FTT (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GbBWwtYTMPis4VHb8MrBbdibPhn28TSrLB53KvUmb7Gi/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9", | |
"assetContract": "https://etherscan.io/address/0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "ftx-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "AbLwQCyU9S8ycJgu8wn6woRCHSYJmjMpJFcAHQ6vjq2P", | |
"symbol": "wTUSD_v1", | |
"name": "TrueUSD (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AbLwQCyU9S8ycJgu8wn6woRCHSYJmjMpJFcAHQ6vjq2P/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x0000000000085d4780B73119b644AE5ecd22b376", | |
"assetContract": "https://etherscan.io/address/0x0000000000085d4780B73119b644AE5ecd22b376", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "true-usd" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3JfuyCg5891hCX1ZTbvt3pkiaww3XwgyqQH6E9eHtqKD", | |
"symbol": "wLON_v1", | |
"name": "Tokenlon (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3JfuyCg5891hCX1ZTbvt3pkiaww3XwgyqQH6E9eHtqKD/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x0000000000095413afC295d19EDeb1Ad7B71c952", | |
"assetContract": "https://etherscan.io/address/0x0000000000095413afC295d19EDeb1Ad7B71c952", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "tokenlon" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6k7mrqiAqEWnABVN8FhfuNUrmrnaMh44nNWydNXctbpV", | |
"symbol": "wALBT_v1", | |
"name": "AllianceBlock Token (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6k7mrqiAqEWnABVN8FhfuNUrmrnaMh44nNWydNXctbpV/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x00a8b738E453fFd858a7edf03bcCfe20412f0Eb0", | |
"assetContract": "https://etherscan.io/address/0x00a8b738E453fFd858a7edf03bcCfe20412f0Eb0", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "allianceblock" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "4b166BQEQunjg8oNTDcLeWU3nidQnVTL1Vni8ANU7Mvt", | |
"symbol": "wSKL_v1", | |
"name": "SKALE (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4b166BQEQunjg8oNTDcLeWU3nidQnVTL1Vni8ANU7Mvt/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x00c83aeCC790e8a4453e5dD3B0B4b3680501a7A7", | |
"assetContract": "https://etherscan.io/address/0x00c83aeCC790e8a4453e5dD3B0B4b3680501a7A7", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "skale" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CcHhpEx9VcWx7UBJC8DJaR5h3wNdexsQtB1nEfekjSHn", | |
"symbol": "wUFT_v1", | |
"name": "UniLend Finance Token (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CcHhpEx9VcWx7UBJC8DJaR5h3wNdexsQtB1nEfekjSHn/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x0202Be363B8a4820f3F4DE7FaF5224fF05943AB1", | |
"assetContract": "https://etherscan.io/address/0x0202Be363B8a4820f3F4DE7FaF5224fF05943AB1", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "unlend-finance" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "VPjCJkR1uZGT9k9q7PsLArS5sEQtWgij8eZC8tysCy7", | |
"symbol": "wORN_v1", | |
"name": "Orion Protocol (Wormhole v1)", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/VPjCJkR1uZGT9k9q7PsLArS5sEQtWgij8eZC8tysCy7/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a", | |
"assetContract": "https://etherscan.io/address/0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "orion-protocol" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CxzHZtzrm6bAz6iFCAGgCYCd3iQb5guUD7oQXKxdgk5c", | |
"symbol": "wSRK_v1", | |
"name": "SparkPoint (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CxzHZtzrm6bAz6iFCAGgCYCd3iQb5guUD7oQXKxdgk5c/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x0488401c3F535193Fa8Df029d9fFe615A06E74E6", | |
"assetContract": "https://etherscan.io/address/0x0488401c3F535193Fa8Df029d9fFe615A06E74E6", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "sparkpoint" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "FqMZWvmii4NNzhLBKGzkvGj3e3XTxNVDNSKDJnt9fVQV", | |
"symbol": "wUMA_v1", | |
"name": "UMA Voting Token v1 (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FqMZWvmii4NNzhLBKGzkvGj3e3XTxNVDNSKDJnt9fVQV/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828", | |
"assetContract": "https://etherscan.io/address/0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "uma" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "6GGNzF99kCG1ozQbP7M7EYW9zPbQGPMwTCCi2Dqx3qhU", | |
"symbol": "wSkey_v1", | |
"name": "SmartKey (Wormhole v1)", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6GGNzF99kCG1ozQbP7M7EYW9zPbQGPMwTCCi2Dqx3qhU/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x06A01a4d579479Dd5D884EBf61A31727A3d8D442", | |
"assetContract": "https://etherscan.io/address/0x06A01a4d579479Dd5D884EBf61A31727A3d8D442", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "smartkey" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "Gc9rR2dUHfuYCJ8rU1Ye9fr8JoZZt9ZrfmXitQRLsxRW", | |
"symbol": "wMIR_v1", | |
"name": "Wrapped MIR Token (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gc9rR2dUHfuYCJ8rU1Ye9fr8JoZZt9ZrfmXitQRLsxRW/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x09a3EcAFa817268f77BE1283176B946C4ff2E608", | |
"assetContract": "https://etherscan.io/address/0x09a3EcAFa817268f77BE1283176B946C4ff2E608", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "mirror-protocol" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "B8xDqdrHpYLNHQKQ4ARDKurxhkhn2gfZa8WRosCEzXnF", | |
"symbol": "wGRO_v1", | |
"name": "Growth (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B8xDqdrHpYLNHQKQ4ARDKurxhkhn2gfZa8WRosCEzXnF/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x09e64c2B61a5f1690Ee6fbeD9baf5D6990F8dFd0", | |
"assetContract": "https://etherscan.io/address/0x09e64c2B61a5f1690Ee6fbeD9baf5D6990F8dFd0", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "growth-defi" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "GE1X8ef7fcsJ93THx4CvV7BQsdEyEAyk61s2L5YfSXiL", | |
"symbol": "wSTAKE_v1", | |
"name": "xDai (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GE1X8ef7fcsJ93THx4CvV7BQsdEyEAyk61s2L5YfSXiL/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x0Ae055097C6d159879521C384F1D2123D1f195e6", | |
"assetContract": "https://etherscan.io/address/0x0Ae055097C6d159879521C384F1D2123D1f195e6", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "xdai-stake" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "7TK6QeyTsnTT6KsnK2tHHfh62mbjNuFWoyUc8vo3CmmU", | |
"symbol": "wYFI_v1", | |
"name": "yearn.finance (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7TK6QeyTsnTT6KsnK2tHHfh62mbjNuFWoyUc8vo3CmmU/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e", | |
"assetContract": "https://etherscan.io/address/0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "yearn-finance" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CTtKth9uW7froBA6xCd2MP7BXjGFESdT1SyxUmbHovSw", | |
"symbol": "wBAT_v1", | |
"name": "Basic Attention Token (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CTtKth9uW7froBA6xCd2MP7BXjGFESdT1SyxUmbHovSw/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole-v1" | |
], | |
"extensions": { | |
"address": "0x0D8775F648430679A709E98d2b0Cb6250d2887EF", | |
"assetContract": "https://etherscan.io/address/0x0D8775F648430679A709E98d2b0Cb6250d2887EF", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "basic-attention-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "EPeUFDgHRxs9xxEPVaL6kfGQvCon7jmAWKVUHuux1Tpz", | |
"symbol": "BAT", | |
"name": "Basic Attention Token (Portal)", | |
"decimals": 8, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPeUFDgHRxs9xxEPVaL6kfGQvCon7jmAWKVUHuux1Tpz/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x0D8775F648430679A709E98d2b0Cb6250d2887EF", | |
"assetContract": "https://etherscan.io/address/0x0D8775F648430679A709E98d2b0Cb6250d2887EF", | |
"bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", | |
"coingeckoId": "basic-attention-token" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "DrL2D4qCRCeNkQz3AJikLjBc3cS6fqqcQ3W7T9vbshCu", | |
"symbol": "wMANA_v1", | |
"name": "Decentraland MANA (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DrL2D4qCRCeNkQz3AJikLjBc3cS6fqqcQ3W7T9vbshCu/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x0F5D2fB29fb7d3CFeE444a200298f468908cC942", | |
"assetContract": "https://etherscan.io/address/0x0F5D2fB29fb7d3CFeE444a200298f468908cC942", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "decentraland" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "3cJKTW69FQDDCud7AhKHXZg126b3t73a2qVcVBS1BWjL", | |
"symbol": "wXIO_v1", | |
"name": "XIO Network (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3cJKTW69FQDDCud7AhKHXZg126b3t73a2qVcVBS1BWjL/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x0f7F961648aE6Db43C75663aC7E5414Eb79b5704", | |
"assetContract": "https://etherscan.io/address/0x0f7F961648aE6Db43C75663aC7E5414Eb79b5704", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "xio" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "CQivbzuRQLvZbqefKc5gLzhSzZzAaySAdMmTG7pFn41w", | |
"symbol": "wLAYER_v1", | |
"name": "Unilayer (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CQivbzuRQLvZbqefKc5gLzhSzZzAaySAdMmTG7pFn41w/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x0fF6ffcFDa92c53F615a4A75D982f399C989366b", | |
"assetContract": "https://etherscan.io/address/0x0fF6ffcFDa92c53F615a4A75D982f399C989366b", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", | |
"coingeckoId": "unilayer" | |
} | |
}, | |
{ | |
"chainId": 101, | |
"address": "8F3kZd9XEpFgNZ4fZnEAC5CJZLewnkNE8QCjdvorGWuW", | |
"symbol": "w1INCH_v1", | |
"name": "1INCH Token (Wormhole v1)", | |
"decimals": 9, | |
"logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8F3kZd9XEpFgNZ4fZnEAC5CJZLewnkNE8QCjdvorGWuW/logo.png", | |
"tags": [ | |
"wrapped", | |
"wormhole" | |
], | |
"extensions": { | |
"address": "0x111111111117dC0aa78b770fA6A738034120C302", | |
"assetContract": "https://etherscan.io/address/0x111111111117dC0aa78b770fA6A738034120C302", | |
"bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864 |
View raw
(Sorry about that, but we can’t show files that are this big right now.)
View raw
(Sorry about that, but we can’t show files that are this big right now.)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment