Типы транзакций в Minter

Материал из Minter Wiki
Ethereum Logo.png

В Minter блокчейне существует 14 типов транзакций. Каждый тип транзакции имеет свою фиксированную комисиию.

С технической точки зрения транзакции в Minter — это RLP-кодированные структуры.

Пример подписанной транзакции:

f873230101aae98a4d4e540000000000000094a93163fdf10724dc4785ff5cbfb9
ac0b5949409f880de0b6b3a764000080801ba06838db4a2197cfd70ede8d8d184d
bf332932ca051a243eb7886791250e545dd3a04b63fb1d1b5ef5f2cbd2ea12530c
da520b3280dcb75bfd45a873629109f24b29

Структура транзакции в Minter

Каждая транзакция, независимо от типа, имеет:

  • Nonce - uint64, используется для предотвращения дублирования транзакции;
  • Gas Price - *big.Int, множитель комиссии, должен быть равен или больше, чем текущая минимальная цена газа в мемпуле;
  • Gas Coin - [10] byte, символ монеты, которой оплачена комиссия, отделена справа нулями;
  • Type - byte, тип транзакции (смотрите ниже);
  • Data - []byte, данные транзакции(зависит от типа транзакции);
  • Payload (произвольные байты) - []byte, произвольные байты определенные пользователем;
  • Service Data - []byte, зарезервированное поле;
  • Signature Type - byte, тип подписи (одиночная или мультиподпись).
  • Signature Data - цифровая подпись транзакции.

Транзакции отличаются только содержимым поля Data

type Transaction struct {
    Nonce         uint64
    GasPrice      *big.Int
    GasCoin       [10]byte
    Type          byte
    Data          []byte
    Payload       []byte
    ServiceData   []byte
    SignatureType byte
    SignatureData Signature
}

type Signature struct {
    V           *big.Int
    R           *big.Int
    S           *big.Int
}

type MultiSignature struct {
    MultisigAddress [20]byte
    Signatures      []Signature
}

Типы подписи

  • TypeSingle — 0х01
  • TypeMulti — 0х02

Типы транзакций

Type Name Byte
TypeSend 0x01
TypeSellCoin 0x02
TypeSellAllCoin 0x03
TypeBuyCoin 0x04
TypeCreateCoin 0x05
TypeDeclareCandidacy 0x06
TypeDelegate 0x07
TypeUnbond 0x08
TypeRedeemCheck 0x09
TypeSetCandidateOnline 0x0A
TypeSetCandidateOffline 0x0B
TypeCreateMultisig 0x0C
TypeMultisend 0x0D
TypeEditCandidate 0x0E

Отправка (Send transaction)

Транзакция отправки произвольной монеты, тип: 0x01

Содержимое полей данных:

type SendData struct {
    Coin  [10]byte  // Символ монеты (тикер)
    To    [20]byte  // Кошелек адресата в сети Minter
    Value *big.Int  // Количество монет для отправки
}

Продажа монет (Sell coin transaction)

Транзакция продажи одной монеты (имеющейся в кошельке), в обмен на другую монету сети Minter, тип: 0x02

Содержимое полей данных:

type SellCoinData struct {
    CoinToSell          [10]byte  // Символ монеты к продаже
    ValueToSell         *big.Int  // Количество монет к продаже
    CoinToBuy           [10]byte  // Символ монет к покупке
    MinimumValueToBuy   *big.Int  // Минимальное значение к покупке
}

Продажа всех монет (Sell all coin transaction)

Транзакция продажи всех имеющихся монет одного типа (в кошельке) в обмен на другую монету сети Minter, тип: 0x03

Содержимое полей данных:

type SellAllCoinData struct {
    CoinToSell          [10]byte  // Символ монеты к продаже
    CoinToBuy           [10]byte  // Символ монет к покупке
    MinimumValueToBuy   *big.Int  // Минимальное значение к покупке
}

Покупка монет (Buy coin transaction)

Транзакция покупки монет, оплаченная другой монетой, имеющейся в кошельке, тип: 0x04

Содержимое полей данных:

type BuyCoinData struct {
    CoinToBuy           [10]byte  // Символ монеты к покупке
    ValueToBuy          *big.Int  // Количество монет к покупке
    CoinToSell          [10]byte  // Символ монет к оплате
    MaximumValueToSell  *big.Int  // Максимальное количество монет к продаже
}

Создание монеты (Create coin transaction)

Транзакция создания новой монеты в блокчейне, тип: 0x05

Содержимое полей данных:

type CreateCoinData struct {
    Name                 string    // Имя монеты. Произвольная строка до 64 символов длиной
    Symbol               [10]byte  // Уникальный символ монеты в верхнем регистре, от 3 до 10 символов.
    InitialAmount        *big.Int  // Количество выпускаемых монет
    InitialReserve       *big.Int  // Резерв в BIP
    ConstantReserveRatio uint      // CRR (коэффициент резервирования) — число от 10 до 100
}

Объявление кандидата в валидаторы (Declare candidacy transaction)

Транзакция для объявления кандидатуры нового валидатора, тип: 0x06

Содержимое полей данных:

type DeclareCandidacyData struct {
    Address    [20]byte  // Кошелек кандидата в сети Minter
    PubKey     []byte    // Публичный ключ валидатора
    Commission uint      // Комиссия (от 0 до 100) валидатора, число от 0 до 100
    Coin       [10]byte  // Символ монеты в стейке
    Stake      *big.Int  // Количество монет в стейке
}

Делегирование монет (Delegate transaction)

Транзакция делегирования средств валидатору, тип: 0x07

Содержимое полей данных:

type DelegateData struct {
    PubKey []byte    // Публичный ключ валидатора
    Coin   [10]byte  // Символ делегируемой монеты
    Stake  *big.Int  // Количество делегируемых монет
}

Отзыв монет (Unbond transaction)

Транзакция для разделегирования средств со счета валидатора, тип: 0x08

Содержимое полей данных:

type UnbondData struct {
    PubKey []byte    // Публичный ключ валидатора
    Coin   [10]byte  // Символ отзываемой монеты
    Value  *big.Int  // Количество отзываемых монет
}

Обналичивание чека (Redeem check transaction)

Транзакция обналичивания чека, тип: 0x09

Содержимое полей данных:

type RedeemCheckData struct {
    RawCheck []byte    // Чек, полученный от отправителя
    Proof    [65]byte  // Доказательство владения чеком
}

Включение ноды кандидата в валидаторы (Set candidate online transaction)

Транзакция для включения ноды кандидата, тип: 0x0A. Эта транзакция должна быть отправлена с адреса, который был объявлен в транзакции объявления кандидата.

Содержимое полей данных:

type SetCandidateOnData struct {
    PubKey []byte  // Публичный ключ валидатора
}

Выключение ноды кандидата в валидаторы (Set candidate offline transaction)

Транзакция выключения ноды, тип: 0x0B. Эта транзакция должна быть отправлена с адреса, который был объявлен в транзакции объявления кандидата.

Содержимое полей данных:

type SetCandidateOffData struct {
    PubKey []byte  // Публичный ключ валидатора
}

Создание адреса с несколькими подписями. (multisig address)

Транзакция создания адреса с несколькими подписями, тип: 0x0C

Содержимое полей данных:

type CreateMultisigData struct {
    Threshold uint        // Минимальный порог
    Weights   []uint      // Вес подписей
    Addresses [][20]byte  // Адреса, подписывающие транзакцию
}

Массовая отправка (Multisend)

Транзакция для отправки монет на несколько адресов одновременно, тип: 0x0D

Содержимое полей данных:

type MultisendData struct {
    List []MultisendDataItem  // Элемент списка, смотрите ниже
}

type MultisendDataItem struct {
    Coin  [10]byte  // Монета для отправки
    To    [20]byte  // Кошелек адресата
    Value *big.Int  // Количество монет для отправки
}

Редактирования кандидата в валидаторы

Транзакция для редактирования существующего кандидата, тип: 0x0E

Содержимое полей данных:

type EditCandidateData struct {
    PubKey           []byte
    RewardAddress    [20]byte
    OwnerAddress     [20]byte
}

Смотрите также

Ссылки