Ethereum에서 Sui로
이전에 Ethereum Virtual Machine(EVM)으로 작업해 본 적이 있다면 Sui에서 개발할 때 가장 큰 차이점은 프로그래밍 언어이다. Sui는 Move를 사용하고 EVM은 Solidity를 사용한다.
| 주제 | Solidity | Move |
|---|---|---|
| Account vs object-centric models | 일반적으로 mapping을 사용해 contract 안에 작성하는 커스텀 소유권 로직이다. Ethereum 코인만 전역 API를 가진 일급 시민이다. 모든 소유권 API는 contract별로 다르다. | 객체 소유권은 Sui에 내재되어 있으며, 객체는 일급 시민이고 Sui에서 소유 되는 모든 것을 포괄한다. |
| Data storage | 데이터는 스마트 계약에 저장된다. | 데이터는 Move 객체에 저장된다. |
| Inheritance | 다형성을 포함한 다중 상속을 지원한다. | 인터페이스와 다형성이 없다. 그러나 Move에는 Type<T>와 같은 제네릭이 있다. |
| Dynamic dispatch | 허용된다 | 허용되지 않는다 |
| Asset/Token accessibility | 스마트 계약에 묶인다. | 누구나 공유 객체에 접근할 수 있다. 소유 객체는 객체 소유자만 접근할 수 있다. |
| Access control | Ownable 및 AccessControl contract를 통한 identity/role 기반 접근 제어이다. | 주로 소유 객체를 통한 capability based access control이다. Identity/role 기반 접근 제어도 가능하다. |
| Contract upgrades | Proxy contract가 사용자 트랜잭션을 전달한다. | 새 contract는 이전 contract와 layout-compatible해야 한다. 공유 객체의 버전 관리도 고려해야 한다. |
| Development environment | Hardhat, Foundry | Move VSCode extension. |
| Mutate contract state | 컴파일 시 ABI 인터페이스로 트랜잭션을 전송한다. | 런타임 프로그래머블 트랜잭션 블록 (PTB) 구성으로 트랜잭션을 전송한다. |