배경
얼마 전, TON의 특징과 사용자 자산의 보안에 대해 살펴보는 첫 번째 시간인 TON: 계정, 토큰, 거래 및 자산 보안에 대해 알아보았습니다. 오늘은 몇 가지 혁신적인 기술과 독특한 기능으로 개발자와 연구자들의 주목을 받고 있는 또 다른 떠오르는 고성능 블록체인 플랫폼인 Sui에 대해 알아보겠습니다.Sui는 다양한 애플리케이션 시나리오에 적합한 빠르고 안전한 거래 경험을 제공하는 데 중점을 두고 있습니다. 이 글에서는 계정 모델, 토큰 관리, 거래 메커니즘, 자산 보안에 대해 설명함으로써 독자들이 Sui를 이해하는 데 도움이 될 것입니다.
계정 모델
주소
Sui는 사용자에게 키 관리를 제공하기 위해 BIP-32(및 변형 SLIP-0010), BIP-44, BIP-39 등 암호화폐 업계에서 널리 인정받는 지갑 사양을 준수합니다.
32바이트 Sui 주소를 도출하기 위해. Sui는 BLAKE2b(256비트 출력) 해시 함수를 사용하여 서명 체계 플래그(1바이트)를 공개 키 바이트와 연결합니다. Sui 주소는 현재 순수 Ed25519, Secp256k1, Secp256r1 및 MultiSig를 지원하며 해당 플래그 바이트는 각각 0x00, 0x01, 0x02 및 0x03입니다.
.
잔액
수이에서는 모든 것이 객체이며, 사용자의 잔액도 마찬가지입니다. 전송 과정에서 객체에 포함된 잔액이 원하는 값과 같지 않으면 객체를 분할하거나 병합해야 합니다. 예를 들어 100 SUI가 포함된 객체가 있는데 30 SUI만 전송하려는 경우, 시스템은 객체를 30 SUI가 포함된 객체와 70 SUI가 포함된 객체 두 개로 분할합니다. 30 SUI가 포함된 객체를 전송하고 나머지 객체는 유지할 수 있습니다. 반대로 더 많은 양이 필요한 경우 여러 개의 잔액 개체를 결합하여 더 큰 양의 개체 하나를 만들 수 있습니다.
토큰 관리
수이는 공식적으로 코인 표준 코드를 구현하고 있으며, 개발자는 코인 발행 시 컨트랙트에서 `use sui::coin;`만 호출하면 표준 라이브러리의 모든 기능을 사용할 수 있습니다.
블록체인에서 일반적으로 사용되는 다른 프로그래밍 언어(솔리디티 등)와는 다른 Move 언어를 사용하기 때문에 개발자가 이해하고 사용 시 유의해야 할 몇 가지 특징이나 기능들이 있습니다. center">
이것은 완전한 코인 발행 계약이며, Sui의 스마트 컨트랙트 설계는 이더나 솔라나와 같은 블록체인 플랫폼과 다르며 소스 코드에서 권한 관리가 보이지 않습니다. 이 함수(coin::create_regulated_currency)를 사용하여 코인을 생성할 때, 컨트랙트 생성자는 새로운 코인을 발행하거나 기존 코인을 소멸하는 데 필요한 TreasuryCap 객체를 받습니다. 이 객체에 액세스할 수 있는 주소만 코인 발행량을 유지할 수 있습니다.
코인을 받은 사용자는 자신의 계정에서 토큰의 소유권을 관리하며, 토큰을 사용하기 위해 스마트 컨트랙트를 호출할 때 이러한 개체를 전달하고 트랜잭션에 서명해야 합니다.
거래 메커니즘
거래는 블록체인 세계의 기본 개념으로, 블록체인과 상호 작용하는 방식입니다. 트랜잭션은 블록체인의 상태를 변경하는 데 사용되며, 이를 위한 유일한 방법입니다. 수이에서 사용하는 Move 프로그래밍 언어에서 트랜잭션은 패키지의 함수를 호출하고, 새 패키지를 배포하고, 기존 패키지를 업그레이드하는 데 사용됩니다.
트랜잭션을 빌드할 때는 각 트랜잭션이 작동 대상을 명시적으로 지정한다는 점에 유의해야 합니다! 이는 계좌 번호를 입력해야 하는 Solana의 트랜잭션과 다소 유사합니다.
트랜잭션에 포함된 내용:
컨트랙트 보안
Sui는 Move를 스마트 컨트랙트의 보안으로 사용합니다. 무브를 스마트 컨트랙트의 프로그래밍 언어로 사용하면 재진입 공격, 정수 오버플로, 이중 지출, DoS 공격, 컴파일러 문제 등 솔리디티의 취약점 문제를 해결할 수 있지만, 개발자가 코드에 버그를 도입하는 것을 막을 수는 없으므로 여전히 보안 감사가 필요합니다. 개발 과정에서 개발자가 주의해야 할 사항은 다음과 같습니다.
1. 권한 확인: 외부 함수에서 수신하는 객체의 유형을 분석하고 민감한 작업을 포함하는 권한이 있는 함수의 경우 수신되는 객체가 권한이 있는 객체인지 확인합니다. 함수가 권한 있는 개체를 수신하여 사용하는 경우 함수 호출자가 해당 개체의 정당한 소유자여야 합니다.
2. 외부 함수 검사: 일부 함수 자체는 외부에서 직접 호출해서는 안 되며, 외부화해서는 안 되는 함수에 대한 인터페이스가 있는 경우 개발자는 해당 함수가 공개되어서는 안 된다고 제안해야 합니다.
3. 객체 분석 확인: Sui의 객체는 공유 객체로 변환할 수 있으므로 개발자는 사용 중인 모든 객체의 유형을 분류하고, 정적인지 공용인지 확인하고, 오류가 있는지 확인해야 합니다. 오류가 있습니다. 비공개여야 하는 개체가 공개 개체로 변환되면 누구나 해당 개체를 사용할 수 있으므로 보안 위험이 있습니다.
4. 코인 고갈 점검: Sui의 토큰 모델은 토큰 객체가 다른 객체에 의해 포함 및 보유될 수 있고 분할이 가능하도록 설계되어 여러 가지 토큰 고갈 패턴이 발생할 수 있다는 점에서 다른 체인과 다릅니다:
토큰 객체를 다른 객체로 직접 전송하는 경우;
토큰 객체를 전송하여 재구조화하여 새 객체를 생성한 다음 대상 객체로 전송합니다.
토큰 객체를 분할하고 분할된 부분을 새 객체로 전송합니다.
따라서 토큰 소비의 경우 개발자는 다음을 확인해야 합니다:
객체가 전송되었는지 여부
분할된 경우, 분할된 양이 정확한지 여부
.
5. 예언 머신 가격 조작 공격: 수이에서 계약이 가격을 얻기 위해 예언 머신을 사용하는 경우 가격 조작의 가능성도 유의해야 합니다. 개발자는 여러 데이터 소스와 합의 메커니즘을 도입하여 단일 데이터 소스의 조작 위험으로부터 보호할 수 있습니다. 또한 시간 가중 평균 가격을 사용하여 예측 기계에 의한 가격 조작의 위험을 방지할 수 있습니다.
6. 거버넌스 공격: 거버넌스 토큰의 투표권이 수이의 계약에 잘 설계되지 않은 경우 거버넌스 공격의 위험도 있으며, 이와 관련하여 일부 성숙한 탈중앙화 조직의 커뮤니티 거버넌스 로직을 참고할 수 있습니다.
7. 차익거래 공격: 로직이 잘 설계되지 않은 경우, Sui의 DeFi 콘트랙트에 대한 차익거래 공격의 위험도 존재합니다. 개발자는 개발 과정에서 컨트랙트의 로직을 주의 깊게 검토하여 공격자에게 악용되지 않도록 해야 합니다.
8. 가짜 충전 공격: 거래소나 개발자는 Sui 토큰 충전을 처리할 때 가짜 충전 공격을 방지하기 위해 거래 상태가 성공적인지, 토큰의 패키지 ID가 올바른지 확인하는 데에도 주의를 기울여야 합니다.
요약
이 백서에서는 계정 모델, 토큰 관리, 거래 메커니즘, 계약 보안 등 Sui의 설계 특징에 대해 간략하게 살펴봤습니다. Move 프로그래밍 언어를 활용하여 혁신적인 데이터 모델과 객체 저장 방법론을 도입하는 동시에 고성능과 짧은 지연 시간을 보장하고 보안과 유연성을 크게 개선한 Sui. 다른 블록체인 플랫폼에 비해 Move 언어는 일반적인 스마트 컨트랙트 취약점(예: 오버플로우, 재입력 공격 등)을 방지하는 데 탁월하며, 이는 기술적 수준에서 Sui를 더욱 강력하고 안정적으로 만듭니다. 그러나 개발자는 여전히 비즈니스 로직 수준, 특히 권한 관리, 객체 유형 사용, 토큰 소비 측면에서 보안에 집중하여 코드의 오류나 부적절한 설계로 인한 자산 손실을 방지해야 합니다.
참고:
https://docs.sui.io/
https://docs.sui.io/
https://docs.sui.io/standards/coin
https://move-book.com/