블록체인 앱 빌더를 사용한 토큰화 지원

Blockchain App Builder를 사용하여 토큰의 전체 수명 주기를 관리할 수 있습니다. 기존 자산을 토큰화하고 토큰 수명 주기 관리에 사용할 토큰 클래스 및 메소드를 자동으로 생성할 수 있습니다.

토큰화

토큰화는 물리적 또는 디지털 자산이 토큰으로 표현되는 프로세스로, 블록체인에 전송, 추적 및 저장될 수 있습니다. 자산을 토큰으로 표시하면 블록체인 원장을 사용하여 자산의 상태 및 소유권을 설정하고 표준 블록체인 플랫폼 기능을 사용하여 자산 소유권을 이전할 수 있습니다.

블록체인 앱 빌더에는 토큰화 지원이 포함됩니다. 토큰 클래스 및 메소드가 자동으로 생성되며, 개발자가 토큰에 대한 복잡한 비즈니스 논리를 생성할 수 있도록 추가 토큰 메소드가 제공됩니다. 자동으로 생성된 프로젝트에는 토큰 수명 주기 클래스 및 함수, CRUD 메소드 및 추가 토큰 SDK 메소드가 포함되어 있으며 인수, 마셜링/마셜링 해제 및 투명한 지속성 기능의 자동 검증을 지원합니다. 이러한 제어기 방법을 사용하여 토큰을 초기화하고, 액세스를 제어하고, 계정을 설정하고, 역할을 관리하고, 토큰의 수명 주기를 관리할 수 있습니다.

다음 다이어그램은 토큰 API 및 토큰 SDK를 포함하여 Blockchain App Builder에서 구현하는 토큰 아키텍처를 보여줍니다.토큰 아키텍처 다이어그램

자동 생성된 토큰 API
Blockchain App Builder는 토큰 및 토큰 수명 주기를 지원하는 방법을 자동으로 생성합니다. 이러한 방법을 사용하면 추가 코딩 없이 토큰을 초기화하고, 역할 및 계정을 관리하고, 기타 토큰 수명 주기 작업을 완료할 수 있습니다.
토큰 SDK
토큰 SDK에는 토큰 애플리케이션에 대한 복잡한 비즈니스 논리를 개발하는 데 도움이 되는 메소드가 포함되어 있습니다.
Multiversion Concurrency Control(MVCC) 최적화
토큰 체인 코드에 대한 MVCC 최적화는 전송, 민트, 레코딩 및 보류 작업에 대한 오류를 줄일 수 있습니다.

토큰 및 계정/잔액 모델

블록체인 앱 빌더는 대체 가능하고 사용 불가능한 토큰을 지원합니다. 교환 가능한 토큰에는 교환 가능한 값이 있습니다. 대체 가능한 토큰의 수량은 동일한 토큰 클래스의 다른 동일한 수량과 동일한 값을 가집니다. 사용할 수 없는 토큰은 고유합니다. 토큰은 전체 또는 소수일 수도 있습니다. 소수점 이하 자릿수를 기준으로 소수점 이하 자릿수를 더 작은 부분으로 나눌 수 있습니다.

토큰은 행동으로도 설명할 수 있습니다. 대체 가능 토큰에 대해 지원되는 동작은 mintable, transferable, divisible, holdable, burnableroles(minter, burnerholder)입니다. 사용할 수 없는 토큰에 대해 지원되는 동작은 mintable, transferable, singleton, indivisible, burnableroles(minterburner)입니다.

토큰화 기능은 계정/잔액 모델을 사용하여 토큰화된 자산을 계정의 잔액으로 나타냅니다. 계정은 예금 및 이체 및 기타 시/도 전환이 계정의 잔액에 영향을 주는 일반적인 은행 계정과 유사합니다. 모든 계정의 잔액은 트랜잭션 금액이 유효한지 확인하기 위해 전역적으로 추적됩니다. 보류 중인 잔액(변경 가능한 토큰의 경우) 및 트랜잭션 기록도 추적됩니다.

토큰을 소유하거나 토큰 관련 작업을 완료하는 사용자는 네트워크에 계정이 있어야 합니다. 모든 계정은 고유 ID(account_id)로 식별됩니다. 계정 ID는 인스턴스 소유자의 사용자 이름 또는 전자 메일 ID(user_id) 또는 인스턴스에 로그인한 사용자를 현재 네트워크 조직에 있는 사용자의 멤버쉽 서비스 제공자 ID(org_id)와 결합하여 생성됩니다. 즉시 사용 가능한 계정 생성 방법이 제공됩니다. 계정 ID에는 조직 ID가 포함되어 있으므로 여러 조직에서 사용자를 지원할 수 있습니다.

토큰 표준

블록체인 앱 빌더는 토큰 분류 프레임워크, ERC-721 표준 및 ERC-1155 표준의 표준과 분류를 확장하여 토큰의 해부학 및 동작을 정의합니다. ERC-1155는 NFT(Fungible Tokens)와 NFT(Non-Fungible Tokens)를 모두 지원하는 표준입니다. ERC-721은 NFT의 표준입니다. Token Taxonomy Framework는 Token Taxonomy Initiative에서 개발했습니다. 자세한 내용은 토큰 분류법 프레임워크를 참조하십시오.

다음 표에서는 Blockchain App Builder에서 지원하는 토큰 유형에 대해 설명합니다.
표준 지원되는 토큰 유형
토큰 분류법 프레임워크
  • 분수 가변 토큰
에르크-721
  • 전체 Non-Fungible 토큰
에르크-1155
  • 전체 fungible 토큰
  • 분수 가변 토큰
  • 전체 Non-Fungible 토큰
  • 소수 자릿수가 아닌 토큰

토큰화 플로우

Blockchain App Builder는 입력 사양 파일 구문을 확장하여 토큰화를 지원하므로 CLI 또는 Visual Studio Code에서 다른 프로젝트를 생성하는 것과 동일한 방식으로 토큰별 프로젝트를 생성합니다. 자세한 내용은 입력 사양 파일을 참조하십시오.

토큰 워크플로우 다이어그램
일반적인 토큰화 흐름은 다음과 같은 기본 단계를 따릅니다.
  • 사용할 토큰 표준을 결정합니다.
  • 지정할 토큰 동작(mintable, transferable, divisible, indivisible, singleton, holdable, burnableroles)을 결정합니다.
  • 입력 사양 파일에서 토큰 자산 및 해당 속성을 정의합니다.
  • 입력 사양 파일에서 체인 코드 프로젝트를 비계합니다. 그러면 토큰 자산 정의 및 해당 속성을 포함하는 모델과 토큰의 동작 및 메소드를 포함하는 컨트롤러를 포함하여 스캐폴딩된 프로젝트가 생성됩니다.
  • 체인코드 프로젝트를 배치하고 테스트합니다.
토큰 기반 프로젝트를 배치한 후 토큰 생성 및 수명 주기 작업 완료를 위한 일반적인 플로우는 다음 단계를 따릅니다.
  • 토큰 체인코드가 배포되고 초기화 메소드로 전달된 목록의 사용자가 체인코드의 Token Admin 사용자가 됩니다.
  • 토큰화된 자산이 초기화되어 해당 토큰의 특정 인스턴스에 대한 고유 식별자인 token_id가 생성됩니다.
  • 토큰을 소유하거나 토큰 관련 작업을 완료할 모든 사용자에 대해 계정을 만들어야 합니다.
  • 토큰에 대해 roles 동작이 지정된 경우 사용자에게 역할을 추가해야 토큰 관련 작업을 완료할 수 있습니다.
  • 그런 다음 토큰 자산에 대해 지정된 동작에 따라 토큰 수명 주기 메소드를 사용할 수 있습니다. 예를 들어, 계정에 대한 토큰을 민트하는 메소드를 호출할 수 있습니다.

액세스 제어

토큰화 지원에는 역할 기반 제어 방식과 소유권 기반 제어 방식을 모두 지원하는 액세스 제어 기능이 포함됩니다. 사용자는 역할 기반 제어를 사용하여 Token Admin 또는 Token Minter와 같은 연관된 역할을 가진 특정 메소드를 호출할 수 있습니다. 소유권 기반 제어를 사용하면 사용자가 소유하지 않은 자산에 액세스하지 못하도록 제한할 수 있습니다. 소유권 기반 액세스 제어를 사용하면 자산을 소유한 사용자(예: Token Owner 또는 Account Owner)가 특정 메소드를 호출할 수 있습니다. 메소드에 대한 액세스 제어에 대한 자세한 내용은 다음 항목에 설명된 메소드의 개별 항목을 참조하십시오.
역할 기반 액세스 제어는 다음 사용자를 지원합니다.
토큰 관리자
Token Admin 사용자는 토큰 체인코드가 배포될 때 지정할 수 있습니다. Token Admin 사용자 정보는 상태 데이터베이스에 저장됩니다. Token Admin 사용자는 다른 사용자에 대한 Token Admin 권한을 부여하고 제거할 수 있습니다. Token Admin 사용자는 자신의 Token Admin 권한을 제거할 수 없습니다. Token Admin 사용자는 Org Admin, 채굴기, 버너 또는 공증 역할을 모든 사용자에게 지정할 수 있습니다.
조직 관리
확장된 토큰 분류법 프레임워크 메소드는 Org Admin 역할을 지원합니다. Token Admin 사용자는 Org Admin 롤을 모든 사용자에게 지정할 수 있습니다. Org Admin 사용자에게는 관리 권한이 있지만 조직 내에서만 가능합니다. 계정을 만들거나 계정 잔액을 볼 수 있지만 조직의 사용자에 대해서만 가능합니다. Org Admin 채굴기, 버너 또는 공증 역할이 있는 사용자는 해당 역할을 조직의 다른 사용자에게 지정할 수 있습니다.
토큰 미터
minter 역할이 지정된 사용자는 Token Minter이며 토큰을 민트할 수 있습니다.
토큰 버너
버너 역할이 지정된 사용자는 Token Burner이며 토큰을 레코딩할 수 있습니다.
토큰 공증
공증 역할이 지정된 사용자는 Token Notary입니다. Token Notary는 납부자와 수취인 간의 트랜잭션에서 제3자 역할을 합니다. Token Notary는 지불인에서 수취인으로 토큰 전송 완료를 트리거하거나 대신 토큰을 지불인 계정으로 반환할 수 있습니다.
저장소 관리자
저장소 역할이 지정된 사용자는 Vault Manager입니다. Vault Manager는 잠긴 NFT를 잠금 해제할 수 있습니다. Vault 역할은 확장된 ERC-721 및 ERC-1155 표준에만 적용할 수 있습니다. NFT를 잠그기 위한 필요 조건은 사용자에게 저장소 역할을 지정하는 것입니다. 체인코드당 한 명의 사용자만 저장소 역할을 지정할 수 있습니다.
소유권 기반 액세스 제어는 다음 사용자를 지원합니다.
계정 소유자
계정이 있는 사용자는 Account Owner입니다.
토큰 소유자
현재 사용할 수 없는 토큰을 소유한 사용자는 해당 토큰의 Token Owner입니다.

또한 일부 방법에서는 역할 기반 액세스 제어 및 소유권 기반 액세스 제어가 결합됩니다. 예를 들어 역할 기반 액세스 제어를 사용하면 광부 역할을 가진 사용자가 토큰을 만들 수 있습니다. 소유권 기반 액세스 제어를 사용하면 불가능한 토큰 소유자가 토큰의 사용자 정의 등록 정보를 수정할 수 있지만 토큰 메타 데이터는 수정할 수 없습니다. Minter 역할을 가진 사용자가 NFT(Non-Fungible Token)를 만들면 NFT의 소유자가 됩니다. 해당 NFT의 소유자는 사용자정의 속성을 수정할 수 있습니다(아트 수집 토큰의 경우 토큰 가격은 사용자정의 속성임). 토큰 생성자가 NFT를 다른 사용자에게 전송하면 두번째 사용자가 소유자가 되고 토큰을 생성한 사용자가 더 이상 토큰의 소유자가 아닙니다. 소유권 기반 액세스 제어로 인해 새 소유자는 이제 사용자 정의 등록 정보 값을 업데이트할 수 있지만 이전 소유자는 더 이상 업데이트할 수 없습니다. 역할 기반 액세스 제어로 인해 이전 소유자는 여전히 NFT를 민트할 수 있지만 새 사용자는 민트할 수 없습니다.

자체 액세스 제어 기능을 작성하거나 액세스 제어를 비활성화할 수도 있습니다. 다음 예에서는 액세스를 제어하는 자동으로 생성된 코드를 보여줍니다.

TypeScript:
await this.Ctx.<Token Standard>Auth.checkAuthorization(...)
이동:
auth, err := t.Ctx.<Token Standard>Auth.CheckAuthorization(...)

주:

자동으로 생성된 액세스 제어 기능을 제거하려면 TypeScript 또는 Go 프로젝트에서 이전 코드 행을 제거하십시오.

MVCC 최적화

Hyperledger Fabric 데이터베이스는 다중 버전 동시성 제어(MVCC)를 사용하여 이중 지출 및 데이터 불일치를 방지합니다. 동일한 상태가 업데이트되면 새 버전의 레코드가 이전 버전을 덮어씁니다. 블록에서 동일한 키를 업데이트하기 위한 동시 요청이 있는 경우 MVCC_READ_CONFLICT 오류가 생성될 수 있습니다.

전송, 민트, 레코딩 및 보류 작업에 대한 MVCC 오류를 줄이려면 토큰 체인코드에 대한 MVCC 최적화를 사용으로 설정할 수 있습니다. 이 최적화는 Oracle Blockchain Platform에서만 작동합니다. 기본적으로 최적화는 비활성화되어 있습니다. 최적화를 사용으로 설정하려면 다음 단계를 완료하십시오.

  • CLI: ochain init 명령을 사용하여 부울 -m 또는 --enable_mvcc_optimization 매개변수를 지정합니다. 기본적으로 이 매개변수는 false로 설정됩니다. 최적화를 사용으로 설정하려면 ochain init 명령행에 -m true를 추가합니다.
  • Visual Studio 코드: 체인 코드를 생성할 때 체인 코드 생성 창에서 MVCC 최적화 사용을 선택합니다.

이전 버전의 Blockchain App Builder에서 만든 체인 코드와 함께 최적화를 사용하려면 다음 단계를 완료하십시오.

  1. 최신 버전의 Blockchain App Builder를 설치한 후 Upgrading Chaincode Projects in the CLIUpgrading Chaincode Projects in Visual Studio Code에 설명된 대로 체인코드를 업그레이드합니다.
  2. 체인 코드의 루트 폴더에 있는 .ochain.json 파일을 편집하여 enableMvccOptimizationtrue로 설정합니다.
  3. 최적화를 추가하고 체인 코드의 루트 폴더에 statedbtokens라는 두 개의 새 폴더를 생성하는 체인 코드를 동기화합니다. 동기화에 대한 자세한 내용은 생성된 소스 코드로 사양 파일 변경 사항 동기화생성된 소스 코드로 사양 파일 변경 사항 동기화를 참조하십시오.

이 오류가 생성될 때 클라이언트 응용 프로그램이 요청을 재시도하도록 하거나, 블록 체인 네트워크로 전송되기 전에 대기열을 사용하여 동시 요청을 캡처하는 등 MVCC_READ_CONFLICT 오류를 해결하는 다른 방법입니다. 자세한 내용은 Hyperledger Fabric 설명서의 읽기-쓰기 세트 의미를 참조하십시오.

주:

MVCC 최적화는 Oracle Blockchain Platform 및 Hyperledger Fabric 피어가 모두 포함된 하이브리드 네트워크나 로컬 Hyperledger Fabric 네트워크에서 테스트할 때 작동하지 않습니다. 하이브리드 네트워크에서 MVCC 최적화를 사용으로 설정하지 마십시오. 이로 인해 피어 간 불일치가 발생할 수 있습니다.