본문으로 건너뛰기

Release Notes


v1.67.1

🔶 Testnet | Source: GitHub Release

Sui Protocol Version in this release: 114

#25364: 테스트 전용 변경으로, 사용자 영향은 없다.

#25556: mainnet에서 address alias 기능을 활성화한다.

#25585: execution의 일부 리팩터링을 지원하기 위해 새 protocol version을 추가한다.

GraphQL

#25261: simulateResultExecutionResult에서는 더 이상 Error field를 사용할 수 없으며, Error는 GraphQL error로 전파된다.

CLI

#25074: sui move build --dump(--dump-bytecode-as-base64의 짧은 버전)가 이제 0 address를 포함한 bytecode를 올바르게 출력한다.

#25587: sui client ptb 출력의 pretty printing을 다시 활성화하는 bug를 수정한다.

Indexing Framework

#25434: ingestion client에서 여러 source를 구성할 수 있었지만 암묵적 우선순위 순서에 따라 하나를 제외한 나머지가 모두 무시되던 문제를 수정하며, 이제 정확히 하나의 source만 제공해야 한다.

#25593: ingestion concurrency와 channel 크기를 줄이며, 테스트 결과 16 cpu 머신에서 병목을 만들지 않으면서 large checkpoint 처리 시 OOM 문제를 제거했다.


Full Log: https://github.com/MystenLabs/sui/commits/testnet-v1.67.1

v1.66.2

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 113

#25588: protocol version을 올린다.

#25361: version 111에서 dev inspect, dry run, execution의 error를 transaction data check 관점에서 더 일관되고 동일하게 만든다.

#25321: devnet의 sui-framework에 Ristretto255 group operation을 추가한다.

Nodes (Validators and Full nodes)

#25257: bridge node에 multi-provider Ethereum RPC 지원을 추가한다.

운영자는 이제 중복성과 장애 허용성을 높이기 위해 quorum 기반 consensus와 함께 여러 Ethereum RPC endpoint를 구성할 수 있다.

새 optional YAML config field는 다음과 같으며, 이는 sui bridge config에 추가된다:

  • eth-rpc-urls(RPC URL 목록)
  • eth-rpc-quorum(quorum 크기, 기본값 1)
  • eth-health-check-interval-secs(health check interval, 기본값 300s)

기존 eth-rpc-url field는 이전 버전과의 호환성을 위해 계속 동작한다.

단일 URL이 구성되면 multi-provider layer는 quorum, health-check, locking 메커니즘 없이 zero-overhead passthrough로 동작한다.

gRPC

#25191: 새 BigTable schema와 pipeline별 watermark를 읽는다.

GraphQL

#25109: GraphQL에서 partial error를 올바르게 지원하며, 유효하지 않은 field에는 error message가 표시되고 유효한 field는 정상적으로 계속 표시된다.

#25110: GraphQL에서 partial error를 올바르게 지원하며, 유효하지 않은 field에는 error message가 표시되고 유효한 field는 정상적으로 계속 표시된다.

#25186: chainIdentifier query가 이제 Base58로 인코딩된 전체 32바이트 digest를 반환한다.

#24788: scanning API용 bloom filter pipeline을 추가한다.

#25191: 새 BigTable schema와 pipeline별 watermark를 읽는다.

CLI

#24469: Sui CLI가 이제 clap-complete를 통한 auto-complete를 지원한다.

sui completion --generate bash
sui completion --generate elvish
sui completion --generate fish
sui completion --generate powershell
sui completion --generate zsh

출력을 사용하는 shell의 올바른 디렉터리의 파일에 넣고, 예를 들어 fish의 경우 ~/.config/fish/completions/sui.fish에 넣은 뒤 shell을 다시 시작한다.

double TAB을 사용해 auto completion menu를 트리거한다.

#25226: sui move test가 이제 Sui의 gas meter와 limit를 사용한다.

#25405: primitive 인자가 reference 또는 mutable reference로 접근될 때 CLI가 Move call에 대한 그 인자의 type을 추론하지 못하던 문제를 수정한다.

#25082: 이제 sui move build --dump-bytecode-as-base64 --pubfile-path <file>를 사용해 dumped bytecode에 ephemeral address를 사용할 수 있다.

--dump 플래그는 --dump-bytecode-as-base64의 shorthand로 사용할 수 있다.

-e의 전체 플래그는 --build-env로 바뀌었으며, shorthand -e는 그대로 유지된다.

--pubfile-path-p와 함께 사용할 때의 bug도 수정했다.

#25592: sui client ptb 출력의 pretty printing을 다시 활성화하는 bug를 수정한다.

Indexing Framework

#25324: framework에서 error를 즉시 보이게 하기 위해 object_store crate 내부 retry를 비활성화한다.

#25325: ingestion stream의 memory leak를 수정한다.

#25334: concurrent pipeline에 ingestion backpressure를 활성화한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.66.2

v1.65.2

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 111

#25366: 111은 execution mode와 transaction data 전반에서 check를 더 일관되게 만든다.

#24957: version 109에서 mainnet용 custom nonzero pcrs parsing을 활성화한다.

gRPC

#25392: #24797에서 도입된 bug를 수정하며, 이 bug는 fullnode가 1.64 release로 index를 복원했을 때 balance index가 부정확해질 수 있었다.

GraphQL

#24963: Balance.totalBalance가 이제 owned coin과 accumulator object의 balance 합계를 반환하며, 개별 coin 또는 address balance는 각각 Balance.coinBalanceBalance.addressBalance를 통해 조회할 수 있고, 이전 동작이 필요하면 coin balance 전용으로 Balance.coinBalance field를 선택하면 된다.

#25108: GraphQL에서 partial error를 올바르게 지원하며, 유효하지 않은 field에는 error message가 표시되고 유효한 field는 정상적으로 계속 표시된다.

CLI

#25016: --serialize-unsigned-transaction과 함께 사용할 때 sui client publishsui client upgrade command에서 --sender 플래그가 이제 올바르게 존중되며, 이전에는 sender가 gas object에서 잘못 추론되어 --sender 플래그를 무시했다.

Indexing Framework

#24066: BCS 파일 대신 zstd 압축 proto 파일을 ingest한다.

#24991: remote_client::RemoteIngestionClientstore_client::StoreIngestionClient가 되며, checkpoint source로 object_store::ObjectStore의 모든 유효한 구현을 지원한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.65.2

v1.64.2

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 109

#25147: fix(sui-http): 명시적인 rustls::CryptoProvider를 사용한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.64.2

v1.64.1

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 109

#24802: TxContext 인자가 이제 어떤 위치에 나타나도 PTB layer에서 호출 가능하다.

#24835: entry function에 대한 signature check를 비활성화하며, Move compiler 변경은 이후 뒤따른다.

#24895: testnet에서 address alias 기능을 활성화한다.

#24879: poseidon_bn254가 모든 네트워크에서 활성화된다.

gRPC

#24794: balance_changes가 요청되었지만 transaction이 아직 index되지 않았을 때 error를 반환한다.

GraphQL

#24782: Relay의 @refetchable annotation을 지원하기 위해 GraphQL Global Identification Specification의 일부인 Query.node(id: ID!): Node를 schema에 도입한다.

#24781: Epoch.totalTransactions가 이제 null 대신 조회 중인 checkpoint 시점의 최신 epoch 값에 대한 값을 반환한다.

#24750: JSON blob으로 effects와 transaction을 반환할 수 있도록 TransactionEffectseffectsJson, TransactiontransactionJson을 추가한다.

#24865: GraphQL request에 이제 단일 "rich query" limit가 적용되며, 이 limit는 단일 request가 database에 대해 만들 수 있는 전용 request 수의 budget을 강제한다.

#24836: balance change를 JSON blob으로 반환할 수 있도록 TransactionEffectsbalanceChangeEffectJson을 추가한다.

#24876: TransactionInput union에 BalanceWithdraw type을 추가한다.

#24770: Display v2 expression을 사용해 MoveValue에서 sub-slice를 추출하는 MoveValue.extract를 도입한다.

#24771: MoveValue를 GraphQL Address로 강제 변환하고 다른 checkpoint에서 address를 볼 수 있도록 MoveValue.asAddressIAddressable.addressAt를 도입한다.

#24772: dynamic field 이름을 Display v2 literal로 제공하는 DynamicFieldName.literal을 추가한다.

#24774: Move value를 대상으로 단일 format string을 평가하는 MoveValue.format을 추가한다.

#24775: PTB input은 type을 추론할 수 있으면 MoveValue로 표현된다.

#24776: system state와 관련된 field를 Epoch에서 제거하고 대신 전체 system state를 Epoch.systemState: MoveValue로 노출하며, 마찬가지로 ValidatorSet의 대부분 field를 ValidatorSet.contents: MoveValue로, ValidatorValidator.contents: MoveValue로 대체한다.

#24779: Query.suinsName(name: ...)Query.address(name: ...)로 바꾸고, IAddressable.defaultSuinsNameIAddressable.defaultNameRecord.target으로 바꾸며, 주어진 SuiNS 이름에 대한 SuiNS NameRecord를 가져오는 Query.nameRecord를 추가한다.

#25025: Balance.totalBalance가 이제 owned coin과 accumulator object의 balance 합계를 반환하며, 개별 coin 또는 address balance는 각각 Balance.coinBalanceBalance.addressBalance를 통해 조회할 수 있고, 이전 동작이 필요하면 coin balance 전용으로 Balance.coinBalance field를 선택하면 된다.

CLI

#24822: sui client publish | upgrade에서 다양한 플래그(예: dry-run)를 사용할 때의 문제를 수정한다.

#24844: --dump-bytecode-as-base64와 함께만 사용할 수 있는 --no-tree-shaking 플래그를 추가하며, 이를 통해 source code에서 사용 여부와 관계없이 모든 dependency를 json 출력의 dependency 목록에 유지하도록 보장하고, 기본적으로는 --no-tree-shaking이 false일 때 CLI가 publication/upgrade 시 사용되지 않는 dependency를 dependency 목록에서 제거한다.

Indexing Framework

#24925: watermark update interval에 optional jitter를 추가한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.64.1

v1.63.4

Mainnet | Source: GitHub Release

📕 Note:

이 release에는 성능 수정이 포함되어 있으며 protocol version bump는 필요하지 않다.

Sui Protocol Version in this release: 107

#24974: write sync를 활성화하는 environment variable을 복원한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.63.4

v1.63.3

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 107

#24856: [consensus] direct finalization을 개선한다. #24943: validator가 reject되어야 하는 transaction에 대해 합의하지 못하던 consensus issue를 수정한다.

Nodes (Validators and Full nodes)

#24742: transaction 서명과 집계된 validator 서명으로 transaction 제출을 처리하는 validator RPC handler를 비활성화한다.

Quorum Driver 또는 유사한 로직을 사용한 transaction 제출은 이제 더 이상 동작하지 않는다.

Transaction Driver와 관련 validator RPC handler만이 이제 Sui에 transaction을 제출하는 유일한 방법이다.

gRPC

#24820: balance_changes가 요청되었지만 transaction이 아직 index되지 않았을 때 error를 반환한다.

GraphQL

#24595: GraphQL에서 partial error를 올바르게 지원하며, 유효하지 않은 field에는 error message가 표시되고 유효한 field는 정상적으로 계속 표시된다.

#24679: query.simulateTransactionchecks_enableddo_gas_selection 인자를 지원한다.

#24681: GraphQL에서 partial error를 올바르게 지원하며, 유효하지 않은 field에는 error message가 표시되고 유효한 field는 정상적으로 계속 표시된다.

#24911: TransactionEffectseffectsJson, balanceChangesJson을, TransactiontransactionJson을 추가해 effects와 transaction을 JSON blob으로 반환할 수 있게 한다.

CLI

#24508: --verify-compatibility를 제거하고 --skip-verify-compatibility를 추가하며, 기본 동작은 로컬에서 upgrade compatibility error를 검사하는 것이다.

#24896: 새 package management system에 여러 변경 사항을 적용한다:

  • --no-tree-shaking 플래그는 오프라인 dump-bytecode-as-base64를 허용한다
  • move-analyzer bug를 수정한다
  • test-publish command를 개선해 Pub.localnet.toml 파일을 dependency 간에 더 쉽게 공유할 수 있게 한다
  • test-upgrade command를 추가한다
  • package와 그 dependency를 push-button 방식으로 로컬 배포할 수 있는 test-publish --publish-unpublished-deps command를 추가한다
  • error message를 수정한다

Indexing Framework

#24503: indexer, ingestion service, metrics service는 이제 실행 시 JoinHandle<()> 대신 Service를 반환하며, Service::main을 사용해 service가 정상 종료되거나 error와 함께 종료될 때까지 기다리거나 graceful shutdown으로 termination signal에 응답할 수 있고, Service는 shutdown process의 여러 측면을 custom할 수 있도록 wait_for_shutdown, join, shutdown function도 노출한다.

#24523: indexer가 --first-checkpoint로 초기화되었을 때 concurrent pipeline에 대한 pruning을 수정한다.



Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.63.3

v1.62.1

Mainnet | Source: GitHub Release

Click to open
Sui v1.62 Gas Schedule 업데이트(및 예상 사항)

Sui v1.62에는 실제 execution cost를 더 정확하게 반영하고 과도 청구를 줄이기 위한 몇 가지 새로운 gas 변경을 도입하는, 목표 지향적인 gas schedule 및 metering 수정이 포함되어 있다.

Summary of gas schedule changes

Dynamic field changes (largest behavioral impact)

Dynamic field operation은 이제 cache 상태에 따라 다른 비용을 청구한다:

  • dynamic field의 첫 번째 load(즉 runtime cache에 없고 transaction에서 생성되지 않은 경우)는 더 비싸다
  • transaction 내에서 같은 dynamic field를 이후에 load하는 경우상당히 더 저렴하다
  • 같은 transaction에서 앞서 생성한 dynamic field에 접근하는 경우상당히 더 저렴하다

Additional execution-level adjustments

다음 execution level 조정이 도입된다:

  • MoveLoc 비용 감소: 이전에는 값이 생성되지 않는데도 값 크기에 비례해 잘못 청구했지만, 이제는 상수 비용을 청구한다
  • ReadRef 비용 소폭 증가: 이 연산은 value copy를 생성하므로 이제 그 비용을 반영한다
  • Execution stack tracking: 더 정확한 stack-height metering으로 일부 instruction의 과도 청구를 줄인다
  • Primitive size accounting tuning: 여러 primitive type에 대해 계산된 "size"가 실제 크기와 더 잘 맞도록 조정되며, 여기에는 일부 감소와 증가가 포함된다

Observed impact from transaction sampling

gas 변경을 검토하면서 수백만 건의 transaction을 backtest했다.

수백만 개의 샘플 transaction 전반에서:

  • **5.7%**에서 gas 사용량 변화가 있었고, 그중:
    • **1.3%**는 gas가 증가했다
    • **4.4%**는 gas가 감소했다
  • 모든 transaction 전체에서 gas cost 변화의 평균은 **−6.03%**였다
  • gas cost 변화의 중앙값은 **−21.52%**였다

영향을 받은 transaction의 분포를 보면:

  • 대략 75번째 percentile까지는 gas cost 변화가 순감소이다
  • 76번째 percentile 이후부터는 변화가 증가 쪽으로 이동한다
  • 극단값(0th/100th percentile)은 더 큰 변동을 보이며, 이는 대부분 dynamic-field 동작과 size/caching의 상호작용으로 설명된다

What this means for developers

대부분의 workload에서는 변화가 없음을 체감할 것이며, 수백만 건의 transaction 중 영향을 받은 비율은 5.7%에 불과하다.

변화가 있다면 비용 감소일 가능성이 더 높다.

Costly patterns

다음 중 일부 또는 전부를 수행하는 경우 transaction 비용이 더 비싸질 수 있다:

  • 고유한 dynamic field를 많이 읽는 경우
  • 읽는 field의 크기가 큰 경우
  • 각 field를 transaction당 몇 번만 읽는 경우

이는 cache되지 않은 dynamic field를 처음 load하는 비용이 이제 더 비싸기 때문이다.

Cheaper transactions

다음 중 하나라도 해당하면 transaction 비용이 더 저렴해져야 한다:

  • 같은 transaction 안에서 작은 집합의 dynamic field를 반복해서 읽는 경우
  • dynamic field를 생성한 뒤 같은 transaction 안에서 다시 접근하는 경우

이제 이러한 경우는 cache를 인식하는 할인과 "transaction 내 생성" 할인 혜택을 받는다.

Secondary effects

대부분의 다른 instruction 및 stack-metering 변경은 규모가 크지 않으며, compilation 최적화로 가는 길을 닦아준다.

시간이 지나면 가능한 한 copy보다 local move를 선호하도록 compiler가 작업하면, compiler는 이러한 변경에서 도입된 MoveLoc 비용 감소의 이점을 활용할 수 있게 될 것이다.

Click to open
PTB의 Non-public entry Function 변경

다음 release(v1.62)에는 non-public(private 또는 public(package)) entry function의 argument에 대한 새로운 검증 규칙 집합이 도입된다.

이 규칙은 기존 규칙을 완전히 대체하며, 대부분의 경우 더 많은 표현력을 허용한다.

이는 이전보다 entry function으로 더 많은 작업을 할 수 있음을 뜻한다.

대부분의 사람이 entry function 주변의 기존 규칙을 이해하지 못한다는 피드백을 받았지만, 이 게시물에서는 해당 규칙이 사라지므로 설명하지 않는다.

대신 앞으로 적용될 새 entry function 규칙에 초점을 맞춘다.

Overview

간단히 말해 non-public entry function의 argument는 hot potato와 얽힐 수 없다.

예를 들어 다음 code를 보자.

module ex::m;

public struct HotPotato()

public fun hot<T>(x: &mut Coin<T>): HotPotato { ... }
entry fun spend<T>(x: &mut Coin<T>) { ... }
public fun cool(h: HotPotato) { ... }

다음 PTB 예시에서는 spend의 input coin이 spend function과 함께 사용될 때 entangled hot potato를 가지므로 유효하지 않다.

// Invalid PTB
0: ex::m::hot(Input(0));
1: ex::m::spend(Input(0)); // INVALID, Input(0) still hot via Result(0)
2: ex::m::cool(Result(0));

하지만 spend가 호출되기 전에 hot potato가 파괴되면 유효하다.

// Valid PTB
0: ex::m::hot(Input(0));
1: ex::m::cool(Result(0));
2: ex::m::spend(Input(0)); // Valid! Input(0) is not hot

아래에서는 이러한 규칙이 왜 존재하는지와 규칙이 어떻게 정의되는지 더 깊이 살펴본다.

The New Rules

Motivation

값을 entry function과 함께 사용할 때 왜 어떤 규칙이 필요한지 궁금할 수 있다.

원래 동기는 package 개발자가 entry function argument에 대해 일정한 의미의 "atomicity"를 보장할 방법을 갖게 하려는 것이었다.

즉 특정 entry function이 PTB 안의 유일한 command일 때 argument가 동일하게 동작하도록 보장하는 방법이다.

대표적인 예는 flash loan으로, 개발자는 특정 Coin이 flash loan에서 온 것이 아니고 겉보기에는 transaction sender가 "소유"한 것임을 보장하고 싶어 할 수 있다.

Move에서 flash loan과 유사한 패턴은 동작을 강제하기 위해 “hot potato” 패턴을 사용한다.

예를 들면 다음과 같다.

module flash::loan;

use sui::balance::Balance;
use sui::sui::SUI;

public struct Bank has key {
id: UID,
holdings: Balance<SUI>,
}

// This is a hot potato because it does not have `store` and does not have `drop`
public struct Loan {
amount: u64,
}

public fun issue(bank: &mut Bank, amount: u64): (Balance<SUI>, Loan) {
assert!(bank.holdings.value() >= amount);
let loaned = bank.holdings.split(amount);
(loaned, Loan { amount })
}

public fun repay(bank: &mut Bank, loan: Loan, repayment: Balance<SUI>) {
let Loan { amount } = loan;
assert!(repayment.value() == amount);
bank.holdings.join(repayment);
}

이 예시에서 issue가 호출되면 Loan hot potato가 생성된다.

PTB에서 issue가 호출되면, 생성된 Loan hot potato가 repay 호출로 파괴되지 않는 한 transaction은 성공하지 않는다.

non-public entry function에 대한 우리의 목표는 어떤 argument도 이러한 flash loan, 또는 유사한 hot potato 시나리오에 관여하지 않도록 보장하는 것이다.

다시 말해 non-public entry function의 argument는 entry function 호출 이후 PTB에서 동작을 강제하는 방식으로 얽힐 수 없다.

이를 위해 활성 상태인 hot potato value 수와 그것들이 어떤 value에 영향을 줄 수 있는지를 세는 algorithm으로 추적한다.

Terminology

규칙과 이를 정의하는 algorithm을 보기 전에 몇 가지 용어를 먼저 정리한다.

  • 규칙은 PTB에 정적으로 적용되며, 이는 PTB 실행이 시작되기 전에 검증이 이루어진다는 뜻이다
  • 일부 경우, 특히 shared object 주변에서는 규칙이 PTB 실행 중 동적으로 적용될 때보다 더 일반적이고 비관적으로 보일 수 있다
  • _value_는 모든 PTB Argument이며, 여기에는 Input, Result, NestedResult, 그리고 이미 smashed된 GasCoin이 포함된다
  • _result_는 PTB command가 반환한 value이며, ResultNestedResult로 참조된다
  • PTB command의 argument에는 by-reference(& 또는 &mut)와 by-value(복사 또는 move) 두 usage type이 있다
  • value의 type에 storedrop이 모두 없으면 그 value는 _hot_으로 간주된다
  • 이는 hot value의 type이 다음 case 중 하나일 수 있음을 의미한다
    • ability가 없음
    • copy
    • key
    • value는 sui::object::UIDcopy가 없으므로 keycopy를 동시에 가질 수는 없다는 점에 유의한다
  • 각 value는 하나의 _clique_에 속하며, clique는 함께 argument로 사용된 value와 그 result를 나타낸다
  • 각 clique에는 hot value의 개수를 나타내는 count가 있으며, 이는 result가 hot이면 증가하고, hot value가 moved될 때, 즉 by-value로 가져가 복사되지 않을 때 감소한다
    • 여기서 count는 미해결 hot potato, 또는 유사한 value가 몇 개인지 추적하고, clique는 그것들이 어떤 value를 제한하거나 영향을 줄 수 있는지 추적한다

The Algorithm

  • PTB의 각 input은 count가 0인 자신의 clique에서 시작한다
  • value가 하나의 command에서 함께 사용되면(by reference 또는 by-value) 각 clique의 count를 더해 clique를 병합한다
  • argument의 병합된 clique count는 moved된 hot value마다 감소한다
  • command가 non-public entry function에 대한 Move call이면, 이 시점에서 argument의 병합된 clique count는 0이어야 한다
    • 이는 non-public entry function이 hot value를 받을 수는 있지만, 그것이 그 clique의 마지막 hot value여야 함을 의미한다
  • 각 command의 result는 argument의 병합된 clique에 포함된다
  • clique의 count는 hot result value마다 증가한다
  • NOTE: shared object가 by-value로 전달되는 경우에는 result value accounting 중 argument의 병합된 clique count를 infinity로 설정하는 특별 규칙이 있다
    • 자세한 내용은 아래 “Limitations” 섹션을 참고한다

Examples

overview의 예시를 algorithm으로 좀 더 신중하게 따라가 보자.

이 예시에서는 각 command 사이에서 각 clique와 그 count를 보여 주며 algorithm을 따라간다.

// Invalid PTB
// Input 0: Coin<SUI>
// cliques: { Input(0) } => 0
0: ex::m::hot(Input(0));
// cliques: { Input(0), Result(0) } = 1
1: ex::m::spend(Input(0)); // INVALID, Input(0)'s clique has a count > 0
2: ex::m::cool(Result(0));

// Valid PTB
// Input 0: Coin<SUI>
// cliques: { Input(0) } => 0
0: ex::m::hot(Input(0));
// cliques: { Input(0), Result(0) } = 1
1: ex::m::cool(Result(0));
// cliques: { Input(0) } => 0
2: ex::m::spend(Input(0)); // Valid! Input(0)'s clique has a count of 0

위의 flash::loan module을 사용하면 더 복잡한 예시를 만들 수 있다.

// Invalid PTB
// Input 0: flash::loan::Bank
// Input 1: u64
// cliques: { Input(0) } => 0, { Input(1) } => 0,
0: flash::loan::issue(Input(0), Input(1))
// cliques: { Input(0), NestedResult(0,0), NestedResult(0,1) } => 1,
1: sui::coin::from_balance(NestedResult(0,0));
// cliques: { Input(0), NestedResult(0,1), Result(1) } => 1,
2: ex::m::spend(Result(1)); // INVALID, Result(1)'s clique has count > 0
3: sui::coin::into_balance(Result(1));
4: flash::loan::repay(Result(3), NestedResult(0,1));

command 1에서 생성된 Coin이 command 0의 flash loan에 직접 관여하지 않았더라도, 이는 hot value NestedResult(0,1)와 같은 clique에 속한다.

따라서 이 값은 private entry function ex::m::spend에 사용할 수 없다.

ex::m::spend가 호출되기 전에 flash::loan::repay로 loan을 상환했다면, 이는 허용된다.

이는 앞선 예시에서 본 경우와 같다.

Limitations

위에서 언급했듯이 shared object를 by-value로 가진 clique는 항상 hot하다.

다시 말해 non-public entry function은 shared object를 by-value로 받을 수는 있지만, 이전에 shared object와 by-value로 상호작용한 clique의 value는 받을 수 없다.

왜 그럴까.

이 규칙은 shared object를 wrap할 수 없기 때문에 필요하며, shared object는 다시 shared되거나 삭제되어야만 한다.

이는 shared object가 hot potato와 유사한 방식으로 동작을 강제하는 데 사용될 수 있음을 뜻한다.

하지만 hot potato와 달리, function signature만 보고는 그것이 올바르게 사용되는지 알 수 없다.

이 algorithm이 "static"이 아니라 "dynamic"이었다면 더 명확성을 희생하는 대신 더 정확할 수 있었다.

즉 정적인 규칙 집합은 보통 동적인 규칙 집합보다 설명하고 따르기가 더 쉽다.

하지만 party objects는 shared object보다 더 좁은 경우에만 이 제한을 받게 될 것이다.

따라서 우리는 정적 시스템의 명확성을 희생하지 않고도 장기적으로 이 제한이 수용 가능하다고 본다.

Coming Soon (v1.63 or later)

이후 버전에서는 entry function에 대한 signature 제한을 제거할 예정이다.

이는 모든 Move function이 entry가 될 수 있음을 뜻한다.

Sui Protocol Version in this release: 104

#24239: 104 - 103에서 Coin의 업데이트 이후 CoinMetadata post update를 갱신한다.

Nodes (Validators and Full nodes)

#24420: transaction 제출에 Quorum Driver를 사용하는 기능을 비활성화하며, TRANSACTION_DRIVER environment variable 설정은 이제 no-op이다.

JSON-RPC

#23737: 이 PR은 [#24192](#24192)와 함께 indexer가 ingestion 시작 지점을 결정하는 방식을 통합하고 watermark로 게이트된 backfill task를 도입한다.

  1. --skip-watermark는 제거되며, concurrent pipeline에 대한 watermark safety check를 우회하던 이전 기능은 더 이상 지원되지 않는다.
  2. --first-checkpoint는 더 이상 indexer가 구성된 checkpoint에서 ingestion을 시작하도록 강제하지 않는다. 이제 indexer는 항상 모든 pipeline에서 다음 checkpoint의 최소값을 시작 ingestion 지점으로 결정해 처리를 재개한다. 이번 release부터 --first-checkpoint는 아직 committer watermark가 없는 pipeline에만 적용되며, 이러한 pipeline은 구성된 값에서 처리를 재개하고, 기존 watermark가 있는 pipeline은 항상 자신의 다음 checkpoint에서 처리를 재개한다.
  3. 새 메커니즘인 watermark task는 운영자가 이력 backfill을 위해 여러 indexer instance에서 같은 pipeline을 실행할 수 있게 한다. 새 플래그 --task--reader-interval-ms가 이 메커니즘을 활성화한다. 이 플래그는 checkpoint가 대응하는 main pipeline의 reader_lo watermark보다 낮지 않은 한 checkpoint 데이터를 커밋하는 tasked indexer를 생성하며, indexer는 --reader-interval-ms에 따라 이러한 tasked pipeline이 main pipeline의 watermark를 얼마나 자주 poll할지 제어한다.

Migration guidance:

  1. --first-checkpoint를 새 pipeline의 초기 ingestion에만 사용한다면 추가 조치는 필요 없다.
  2. 이전에 --first-checkpoint와 선택적으로 --skip-watermark를 사용해 기존 table을 backfill했다면, --task, --reader-interval-ms, --first-checkpoint를 구성한 새 indexer instance를 시작해 동일한 workflow를 달성할 수 있다.
  3. --skip-watermark와 마찬가지로 --task는 sequential pipeline 실행에는 사용할 수 없다.

GraphQL

#24319: simulateTransaction call의 일부였던 transaction payload가 query payload의 일부로 잘못 분류되어 더 낮은 payload 크기 limit가 적용되던 bug를 수정한다.

#23928: SimulationResult에서 events field를 제거하며, 중복 제거를 위해 event는 이제 effects.events()를 통해서만 접근할 수 있다.

#23929: checkpoint에 포함되지 않으므로 simulated/executed transaction timestamp에 대해 null을 반환한다.

#24486: AvailableRange query에 전달된 type과 field를 검증한다.

CLI

#24367:

  • sui validator command가 transaction argument에 공유 TxProcessingArgs struct를 사용하도록 리팩터링해 sui client와의 일관성을 높였다
  • offline signing에 대해 더 명확한 지침을 제공하도록 serialize_unsigned_transaction help text를 갱신했다

Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.62.1

v1.61.2

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 103

#24343: coin.move에 framework 변경을 적용한다.

gRPC

#24244: 아직 완전히 저장되지 않은 새 checkpoint에 대해서는 "Internal Error" 대신 "Not Found"를 반환한다.

GraphQL

#24202: 어느 시점에 삭제되거나 wrap된 object의 object version을 pagination할 때 관련 bug를 수정한다.

#24325: simulateTransaction call의 일부였던 transaction payload가 query payload의 일부로 잘못 분류되어 더 낮은 payload 크기 limit가 적용되던 bug를 수정한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.61.2

v1.60.1

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 101

#24073: Coin registry patch를 적용한다.

Nodes (Validators and Full nodes)

#24010: transaction 처리 기본값으로 Mysticeti 2.0과 TransactionDriver를 사용한다.

CLI

#24133: 로컬 네트워크에서 indexer 및/또는 GraphQL을 실행할 때 기존의 원격 postgress database와 통신할 수 있는 기능을 추가한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.60.1

v1.59.1

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 100

#24108: private generics check를 단순화한다.

GraphQL

#23851: live object set query에 historical data가 포함되던 bug를 수정한다.

#23417: type, field, filter에 대해 데이터가 उपलब्ध한 checkpoint 범위를 질의하는 AvailableRange API를 추가한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.59.1

v1.58.3

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 98

#23866: bytecode verifier의 문제를 수정한다.

JSON-RPC

#23766: get_transactions_by_move_function에서 결과 누락을 일으키던 잘못된 iter bound를 수정한다.

GraphQL

#23689: 위임된 operation ability의 address가 존재하는 경우 이를 표시하는 Validator.operationCap을 추가한다.

#23697: epoch 번호와 exchange rate의 매핑을 표시하는 Validator.exchangeRatesTable을 추가하며, 이 exchange rate는 과거 SUI staker 각각이 미래에 인출할 수 있는 SUI token 양을 결정하는 데 사용된다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.58.3

v1.57.3

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 97

#23858: bytecode verifier의 문제를 수정하는 새 protocol version을 추가한다.

JSON-RPC

#23766: get_transactions_by_move_function에서 결과 누락을 일으키던 잘못된 iter bound를 수정한다.

GraphQL

#23689: 위임된 operation ability의 address가 존재하는 경우 이를 표시하는 Validator.operationCap을 추가한다.

#23697: epoch 번호와 exchange rate의 매핑을 표시하는 Validator.exchangeRatesTable을 추가하며, 이 exchange rate는 과거 SUI staker 각각이 미래에 인출할 수 있는 SUI token 양을 결정하는 데 사용된다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.57.3

v1.57.2

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 96

#23650: mainnet에서 Mysticeti v2(Mysticeti fastpath) 지원을 활성화한다.

Nodes (Validators and Full nodes)

#23492: summary에 CheckpointArtifacts digest를 추가하며, 현재는 테스트를 위해 Devnet에서 활성화되어 있다.

gRPC

#22874: 새 CoinRegistry system object와 GetCoinInfo를 통합한다.

JSON-RPC

#22903: coin metadata 및 total supply API를 CoinRegistry system object와 통합한다.

GraphQL

#23597: GraphQL의 Query.coinMetadata API에 Coin Registry 지원을 추가한다.

#23636: nullable parameter를 채우기 위해 variable을 사용한 뒤 그 variable을 제공하지 않았을 때, 즉 유효한 경우에도 query가 실패하던 bug를 수정한다.

CLI

#23433: CLI 바이너리 protocol version이 네트워크와 같거나 더 새롭지 않을 때 upgrade command가 조기에 종료되던 bug를 수정한다.

#23533: transaction replay가 이제 Sui CLI의 자체 command인 sui replay를 가진다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.57.2

v1.56.2

Mainnet | Source: GitHub Release

CLI

#23472: CLI 바이너리 protocol version이 네트워크와 같거나 더 새롭지 않을 때 upgrade command가 조기에 종료되던 bug를 수정한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.56.2

v1.55.0

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 94

#23220: protocol을 version 94로 올린다.

Nodes (Validators and Full nodes)

#23074: consensus로 전송되는 CheckpointSignatures의 delta에 이제 dedup key의 일부로 Digest를 포함한다.

CLI

#23036: (linux, macos) sui.keystore 파일에 0600 플래그가 설정되도록 보장하며, 이는 공유 multi-user host에서 실행되는 Sui wallet을 방어하기 위한 defense-in-depth 조치이다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.55.0

v1.54.2

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 92

#22675: Sui Framework에 minor patch를 적용한다.

#23041: shared object 삭제 규칙이 이제 transaction 단위가 아니라 command 단위로 더 세분화된다.

CLI

#22924: 이제 client transfer command를 통해 party object 전송을 지원한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.54.2

v1.53.2

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 90

#20957: protocol version 89와 standard library 변경을 갱신한다.

#22798: protocol version 89mainnet에서 passkey와 multisig 내부 passkey를 활성화한다.

#22940: protocol version 8990으로 이동한다.

Nodes (Validators and Full nodes)

#22842: transaction 처리 중 발생한 ObjectNotFoundDependencyPackageNotFound error가 이제 기본적으로 QuorumDriver에서 재시도된다.

CLI

#22914: debugger용 생성된 trace에서 global value mutation tracking과 관련된 bug를 수정한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.53.2

v1.52.3

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 89

#22937: 최신 check를 활성화하는 새 protocol version을 추가한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.52.3

v1.52.2

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 88

#22580: Sui System에 calculate_rewards function을 추가한다.

#22611: type resolution 관련 error message를 개선한다.

Nodes (Validators and Full nodes)

#22572: fullnode state sync fallback에 path 기반 remote-store 옵션을 지원한다.

#22594: 사용자에게 눈에 띄는 영향은 없다.

gRPC

#22435: GetPackage, GetModule, GetFunction, GetDatatype API를 구현한다.

#22525: MovePackageService용 ListPackageVersions API를 구현한다.

#22560: memory 안에서 balance update batch를 누적해 index 초기화를 가속한다.

#22619: index 초기화를 위해 rocksdb를 조정한다.

CLI

#22530: sui keytool export가 이제 alias field를 올바르게 표시한다.

#22528: 게시된 address가 있는 Move.lock 파일이 존재할 때의 logic bug 때문에 sui move build --dump-bytecode-as-base64가 동작하지 않던 문제를 수정한다.

#22622: transaction replay-transactionreplay-batch client subcommand를 새 transaction replay 인프라를 사용하도록 갱신한다.

#22644: sui client command에서 profile-transactionreplay-checkpoint command를 제거한다.

Rust SDK

#22595: SuiClientBuilder에 사용자 정의 custom header 지원을 추가하며, custom header는 SuiClientBuilder::custom_headers function을 통해 정의하고 build 직전에 추가해야 한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.52.2

v1.51.5

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 87

#22244: object runtime에서 type tag를 사용하는 방식에 변경을 적용하며, 사용자에게 보이는 영향은 없다.

#22419: 명확성을 위해 protocol config에 기존의 하드코딩된 bound를 추가한다.

#19439: transaction에서 접근하는 epoch별 read-only config에 epoch-stable sequence number를 추가한다.

#22474: testnet에서 Party object와 관련 party_transfer function을 활성화한다.

Nodes (Validators and Full nodes)

#21877: validator gRPC interface에 연결하려면 이제 TLS가 필요하다.

#22540: state sync archive fallback의 기본 bucket이 이제 requester pays policy를 사용하며, docs에 따라 sui node의 state-archive-read-config section을 갱신해야 한다.

gRPC

#22241: LiveDataService에 GetBalance 및 ListBalances API를 구현한다.


Co-authored-by: Brandon Williams <brandon@mystenlabs.com>

#21877: validator gRPC interface에 연결하려면 이제 TLS가 필요하다.

CLI

#22332: Move 단위 테스트 필터링에 사용하는 test 이름을 fully-qualified name과 매칭하도록 갱신하며, 즉 a::test_name 대신 testing::a::test_name을 사용하고, substring matching뿐 아니라 regex를 사용한 test filtering도 지원한다.

#22303: package summary 생성을 더 portable하게 갱신한다.

#22350: git dependency인 Move package의 초기 clone 시간을 개선한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.51.5

v1.51.4

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 87

#22244: object runtime에서 type tag를 사용하는 방식에 변경을 적용하며, 사용자에게 보이는 영향은 없다.

#22419: 명확성을 위해 protocol config에 기존의 하드코딩된 bound를 추가한다.

#19439: transaction에서 접근하는 epoch별 read-only config에 epoch-stable sequence number를 추가한다.

#22474: testnet에서 Party object와 관련 party_transfer function을 활성화한다.

Nodes (Validators and Full nodes)

#21877: validator gRPC interface에 연결하려면 이제 TLS가 필요하다.

#22540: state sync archive fallback의 기본 bucket이 이제 requester pays policy를 사용하며, docs에 따라 sui node의 state-archive-read-config section을 갱신해야 한다.

gRPC

#21877: validator gRPC interface에 연결하려면 이제 TLS가 필요하다.

CLI

#22332: Move 단위 테스트 필터링에 사용하는 test 이름을 fully-qualified name과 매칭하도록 갱신하며, 즉 a::test_name 대신 testing::a::test_name을 사용하고, substring matching뿐 아니라 regex를 사용한 test filtering도 지원한다.

#22303: package summary 생성을 더 portable하게 갱신한다.

#22350: git dependency인 Move package의 초기 clone 시간을 개선한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.51.4

v1.50.1

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 85

#22173: system transaction이 더 큰 object를 생성할 수 있도록 허용한다.

#22353: congestion control 설정을 조정한다.

Nodes (Validators and Full nodes)

#22143: validator의 dryRun mode에 기본적으로 DoS protection을 활성화한다.

gRPC

#21896:

#22197: validator와의 gRPC interface 연결에 TLS를 활성화한다.

JSON-RPC

#21932: abort error가 발생할 때 추가 error 정보를 반환한다.

CLI

#22166: upgrade capability를 전달하기 위해 sui client upgrade command에 -c short flag를 추가한다.

#22139: 선택적 --no-tls 플래그와 함께 sui-tool에 기본 TLS를 추가한다.

#22293: transaction의 sender를 특정 address로 설정하기 위한 새 --sender 인자를 추가한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.50.1

v1.49.2

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 84

#22081: adapter에서 TypeInput으로부터 변환할 때 모든 type input을 defining ID 기반으로 정규화한다.

#22113: mainnet에서 congestion control용 ExecutionTimeEstimate mode를 활성화한다.

#22120: Nitro attestation parsing logic를 갱신하고 version 83mainnet에서 활성화한다.

#22092: object runtime이 VM runtime type 대신 TypeTag를 사용하도록 전환하는 새 기능 플래그를 추가한다.

#22258: 커뮤니티 투표에 따라 도난 자금 복구를 허용하도록 업그레이드한다.

Nodes (Validators and Full nodes)

#21955: state sync용 Sui archive 메커니즘을 기존 형식에서 checkpoint data ingestion bucket으로 전환하며, full node config의 state-archive-read-config section은 ingestion-url field를 포함하도록 갱신해야 하고, 가능한 bucket 옵션은 https://docs.sui.io/guides/developer/advanced/custom-indexer#remote-reader 를 참고한다.

CLI

#21983: clientmove subcommand에 --client.env 플래그를 추가해 단일 CLI command에 대해 특정 environment를 선택할 수 있게 한다.

Rust SDK

#21893: ProgrammableTransactionBuilder에 새 merge_coinssmash_coins function을 추가한다.

#21983: WalletContext::new의 인자를 갱신해 이제 config 경로만 받도록 하며, 추가 구성(timeout, max concurrent connections 등)은 context 생성 후 설정할 수 있다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.49.2

v1.48.4

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 83

#22259: 커뮤니티 투표에 따라 도난 자금 복구를 허용하도록 업그레이드한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.48.4

v1.48.2

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 82

#21760: version 82, Sui System 정리 및 minor patch를 적용한다.

gRPC

#21837: validator와의 gRPC interface 연결에 TLS를 활성화한다.

CLI

#20851: 생성되는 Move trace 표현이 압축되도록 변경하며, 기존 Move test trace는 사용하려면 다시 생성해야 한다.

#21837: validator와의 gRPC interface 연결에 TLS를 활성화한다.

#21790: parsing error와 관련해 compilation process가 더 관대해진 결과 compiler가 약간 다른 error를 생성할 수 있다.

#21876: bug를 수정한다.

#21912: CLI에 sui client remove-address command를 추가한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.48.2

v1.47.1

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 81

#21303: Sui System에 SIP-39를 구현한다.

#21704: v81의 mainnet에 consensus median 기반 timestamp를 활성화한다.

#21802: mainnet v47에서 consensus에서 leader로 간주되지 않는 bad node의 임계값을 높인다.

JSON-RPC

#21605: 내부 minor log 변경으로, 사용자 영향은 없다.

#21622: 내부 metrics 및 logging minor 변경으로, 사용자 영향은 없다.

CLI

#21609: sui client ptb가 이제 package ID와 type tag에 대해 MVR 이름으로 등록된 package 전달을 지원한다.

#21685: 외부에서 해석된 dependency의 전이 dependency를 읽기 전에 가져오도록 bug를 수정한다.

#21671: DeepBook이 더 이상 암묵적 dependency로 포함되지 않는다.

#21742: external resolver에 대한 불필요한 error message를 제거한다.

#21710: 암묵적 dependency가 있을 때 sui move disassemble 관련 bug를 수정한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.47.1

v1.46.3

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 80

#21815: PTB value 크기를 제한하는 수정을 추가한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.46.3

v1.46.2

Mainnet | Source: GitHub Release

‼️# Private Release Notice‼️ 이 release에는 fullnode와 validator에 영향을 주는 issue에 대한 비공개 수정이 포함되어 있다.

변경 사항은 내일 epoch change 이후 mainnet에 적용되면 공개될 예정이다.

Private Commit: 3c894a0ab474fca8d4880606f919ab9af91f4529 Private release install instructions: https://bit.ly/sui-private-release-install

첨부된 바이너리는 사용하지 말고, epoch change 이후 4/10까지는 대신 https://sui-releases.s3-accelerate.amazonaws.com/3c894a0ab474fca8d4880606f919ab9af91f4529/sui-node 에서 다운로드한다.

Sui Protocol Version in this release: 79

#21530: testnet에서 consensus commit median 기반 timestamp 계산을 활성화한다.

#21562: v79에서 testnet의 consensus에서 leader로 간주되지 않는 bad node의 임계값을 높인다.

#21621: mainnet에서 consensus garbage collection과 새 linearizer logic을 활성화한다.

Nodes (Validators and Full nodes)

#21715: validator에서 epoch 종료 시 crash loop를 일으킬 수 있던 issue를 수정한다.

JSON-RPC

#21489: dependency 변경으로, 사용자에게 눈에 띄는 영향은 없어야 하며 내부 minor log 변경과 내부 metrics/logging의 minor 변경이다.

CLI

#21462: 빈 package를 publish할 때 error 응답을 개선한다.

#21633: macro 주변의 Move Analyzer issue를 수정하며, Move가 이제 lambda에 대한 type annotation을 지원한다.

#21649: sui client ptb가 이제 package ID와 type tag에 대해 MVR 이름으로 등록된 package 전달을 지원한다.

#21693: package management bug를 수정한다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.46.2

v1.45.3

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 78

#21444: mainnet에서 group op uncompressed를 활성화한다.

#21420: testnet에서 consensus garbage collection과 새 commit rule을 활성화한다.

#21460: native transaction context와 sponsor를 지원하기 위한 새 protocol version을 추가한다.

#21492: testnet에서 congestion control용 새 ExecutionTimeEstimate mode를 활성화한다.

Nodes (Validators and Full nodes)

#21563: validator에 필요한 새 version으로 업그레이드하며, fullnode는 영향받지 않는다.

JSON-RPC

#21375: dry run transaction에서 error source 정보를 반환한다.

#21474: partition advance의 flakiness bug를 수정하며, JSON-RPC interface에는 영향이 없다.

GraphQL

#21474: partition advance의 flakiness bug를 수정하며, GraphQL interface에는 영향이 없다.

CLI

#21204: Move.toml에 포함되지 않았을 경우 system package(MoveStdLib, Sui, System, DeepBook, Bridge)에 대한 dependency를 암묵적으로 추가한다.

#21491: v1.45.0부터 sui console command는 더 이상 사용할 수 없다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.45.3

v1.44.3

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 77

#21108: testnet에서 passkey를 활성화하도록 protocol version을 업그레이드한다.

#21192: Sui framework에 변경을 적용하고, cancel과 withdrawal을 제외한 Deepbook V2를 deprecated 처리한다.

#21364: consensus garbage collection과 새 commit rule을 활성화한다.

#18820: multisig 내부에서 passkey를 허용하는 기능 플래그를 추가하며, devnet과 testnet에서 활성화한다.

#21445: protocol version 77의 mainnet에서 uncompressed group op를 활성화한다.

#21449: testnet에서 consensus garbage collection과 새 commit rule을 활성화한다.

JSON-RPC

#21359: Move enum type의 enum variant 순서를 이제 사전순이 아니라 선언 순서대로 반환한다.

GraphQL

#21032: 이전 deprecation 공지에 따라 ObjectFilter에서 objectKeys field를 제거하며, 여러 object를 가져오려면 대신 multiGetObjects를 사용한다.

CLI

#21211: sui client publish/upgrade는 이제 기본적으로 source code에서 참조되지 않는 dependency를 온체인 publish 대상에서 제거한다.

#21331: sui client ptbsui::object::ID value를 pure input으로 사용해 transaction을 생성하도록 지원을 추가하며, ID input은 address처럼 지정하고, 즉 앞에 @가 붙은 16진수로 지정하며, type은 사용 위치로부터 추론된다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.44.3

v1.43.1

Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 74

#20984: protocol version을 74로 올린다.

#20870: devnet에서 aws nitro enclave attestation을 검증하는 새 native function을 추가한다.

#21177: mainnet에서 consensus tonic network에 zstd compression을 활성화한다.

#21208: testnet에서 consensus garbage collection을 활성화한다.

JSON-RPC

#21166: zklogin signature를 검증하는 새 read api를 추가한다.

CLI

#21116: CLI가 active environment에 연결하지 못할 때 대부분의 command에서 error가 발생하던 bug를 수정한다.

#20977: publish와 upgrade는 이제 source verification이 향후 release에서 opt-in이 될 것이라는 warning을 표시하며, 이 warning은 --skip-dependency-verification 또는 새 --verify-deps 플래그로 비활성화할 수 있다.

#21159: publish/upgrade command의 source verification이 이제 opt-out이 아니라 opt-in이다.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.43.1