MMS

В нашем последнем выпуске Sui представлены три новых собственных типа транзакций и объявлены устаревшими три существующих метода. Новые API —Платить,PaySui, а также PayAllSui— эффективно заменить TransferSui, SplitCoin и MergeCoin. Три старых метода пока остаются функциональными, и мы заранее уведомим сообщество, прежде чем удалять их.

Эти способы оплаты обеспечивают большую простоту использования и могут поддерживать различные сценарии с меньшими затратами на управление монетами. Мы надеемся, что разработчики найдут больше гибкости для поддержки более широкого набора вариантов использования, а также более надежные гарантии API, которые обычно ожидаются от вариантов использования платежей.

Платить,PaySui, а такжеPayAllSuiбыли выпущены как часть Sui 0.14.0.

Новые типы транзакций Pay*

Payтранзакции принимают несколько монет и отправляют на несколько адресов, следуя указанному списку сумм. Payтранзакции принимают любой тип монеты, включая SUI. Для оплаты газа будет использоваться отдельный объект SUI, и при необходимости протокол выберет его для транзакции.

  • Если получатель и отправитель одни и те же, Payфактически является обобщенной версией splitCoinи mergeCoin.

PaySuiтранзакции принимают несколько монет SUI и отправляют их на несколько адресов в соответствии с указанным списком сумм. PaySuiпринимает только монеты SUI и не требует газовой монеты.

  • Первый ввод объекта монеты SUI будет использоваться для оплаты газа, поэтому баланс этой монеты SUI должен быть равен или превышать бюджет газа.
  • Общий ввод баланса монет SUI должен быть достаточным для покрытия как газового бюджета, так и сумм, подлежащих переводу.

PayAllSuiтранзакции берут несколько монет SUI и отправляют их одному получателю после вычета оплаты за газ. После транзакции под адресом отправителя останется строго ноль введенных монет SUI.

  • Первый ввод объекта монеты SUI будет использоваться для оплаты газа, поэтому баланс этой монеты SUI должен быть равен или превышать бюджет газа.
  • Отправитель может перевести все свои монеты SUI на другой адрес со строго нулевым SUI, оставшимся в одной транзакции с помощью этого типа транзакции.

Руководство по миграции

Ниже приведены примеры кода миграции на основе Typescript SDK. Эти изменения очень похожи на то, что будет использоваться для конечных точек Rust SDK и RPC.

  • TransferSuiс указанной суммой перейдет наPaySui
// pre-migration codes in TS
const txn = {
    suiObjectId: id,
    gasBudget: GAS_BUDGET,
    recipient: recipient_addr,
    amount: amount,
};
await signer.transferSuiWithRequestType(txn);


// post-migration codes in TS
const txn = {
    inputCoins: [id],
	// length of recipients need to be the same as amounts
    recipients: [recipient_addr],
    amounts: [amount],
    gasBudget: GAS_BUDGET,
};
await signer.paySuiWithRequestType(txn);
  • TransferSuiбез указанной суммы будет мигрировать вPayAllSui
// pre-migration codes in TS
const txn = {
    suiObjectId: id,
    gasBudget: GAS_BUDGET,
    recipient: recipient_addr,
    amount: null,
};
await signer.transferSuiWithRequestType(txn);


// post-migration codes in TS
const txn = {
    inputCoins: [id],
    recipient: recipient_addr,
    gasBudget: GAS_BUDGET,
};
await signer.payAllSuiWithRequestType(txn);
  • SplitCoinи MergeCoinперейдет на Pay
// pre-migration split coin
const txn = {
  coinObjectId: id;
  splitAmounts: [amount0, amount1],
  gasPayment: gas_obj_id,
  gasBudget: GAS_BUDGET,
};
await signer.SplitCoinWithRequestType(txn);
// post-migration pay txn for splitting
const txn = {
  inputCoins: [id],
// length of recipients need to be the same as amounts
  recipients: [sender_addr, sender_addr],
  amounts: [amount0, amount1],
  gasPayment: gas_obj_id,
  gasBudget: GAS_BUDGET,
};
await signer.PayWithRequestType(txn);


// pre-migration merge coin
const txn = {
  primaryCoin: primary_coin_id,
  coinToMerge: coin_to_merge,
  gasPayment?: gas_obj_id,
  gasBudget: GAS_BUDGET,
};
await signer.MergeCoinWithRequestType(txn);
// post-migration pay txn for merging
const txn = {
  inputCoins: [primary_coin_id, coin_to_merge],
  recipients: [sender_addr],
  amounts: [primary_coin_amount + coin_to_merge_amount],
  gasPayment: gas_obj_id,
  gasBudget: GAS_BUDGET,
};
await signer.PayWithRequestType(txn);

Текущая связанная работа

Наша команда будет продолжать работать над дальнейшим улучшением опыта разработчиков и скорости, связанной с платежами. Другие инициативы, над которыми мы работаем, включают:

  • Реализуйте аналогичные полезные функции, как Payв модулях Move.
  • Внедрите оценку газа для улучшения баланса газа и оценки общей стоимости газа.
  • Дальнейшее улучшение API выбора монет для различных вариантов использования.

Узнать больше о Sui

Стройте вместе с нами!

Мы в восторге от того, как разворачивается будущее, и приглашаем создателей и строителей Присоединяйтесь к нам

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *