ERC-1155용 TypeScript 토큰 프로젝트 비계
Blockchain App Builder는 토큰 사양 파일에서 입력을 받아 모든 기능을 갖춘 비계 체인 코드 프로젝트를 생성합니다.
프로젝트는 CRUD 및 비CRUD 메소드를 포함한 토큰 수명 주기 클래스 및 함수를 자동으로 생성합니다. 인수 검증, 마셜링/마셜링 해제 및 투명한 지속성 기능이 모두 자동으로 지원됩니다.
비계 프로젝트 및 토큰과 직접 관련되지 않은 방법에 대한 자세한 내용은 비계 TypeScript 체인코드 프로젝트를 참조하십시오.
모델
토큰화된 모든 모델 클래스는 OchainModel
클래스를 확장합니다. 투명한 지속성 기능 또는 단순화된 ORM은 OchainModel
클래스에 캡처됩니다. 다음 모델은 완전히 실행 불가능한 토큰을 보여줍니다.
import * as yup from "yup";
import { Id, Mandatory, Validate, Default, Embedded, Derived, ReadOnly } from "../../lib/decorators";
import { OchainModel } from "../../lib/ochain-model";
import { STRATEGY } from "../../lib/utils";
import { EmbeddedModel } from "../../lib/ochain-embedded-model";
export class ArtCollectionMetadata extends EmbeddedModel<ArtCollectionMetadata> {
@Validate(yup.string())
public painting_name: string;
@Validate(yup.string())
public description: string;
@Validate(yup.string())
public image: string;
@Validate(yup.string())
public painter_name: string;
}
@Id("tokenId")
export class ArtCollection extends OchainModel<ArtCollection> {
public readonly assetType = "otoken";
@Mandatory()
@Validate(
yup
.string()
.required()
.matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/)
.max(16)
)
public tokenId: string;
@ReadOnly("artcollection")
public tokenName: string;
@Validate(yup.string().trim().max(256))
public tokenDesc: string;
@ReadOnly("erc1155+")
public tokenStandard: string;
@ReadOnly("nonfungible")
public tokenType: string;
@ReadOnly("whole")
public tokenUnit: string;
@ReadOnly(["indivisible","singleton","mintable","transferable","burnable","roles"])
public behaviors: string[];
@ReadOnly({ minter_role_name: "minter" })
public roles: object;
@ReadOnly({ max_mint_quantity: 20000 })
public mintable: object;
@Validate(yup.string())
public owner: string;
@Validate(yup.string())
public createdBy: string;
@Validate(yup.string())
public transferredBy: string;
@Validate(yup.string())
public creationDate: string;
@Validate(yup.string())
public transferredDate: string;
@Validate(yup.bool())
public isBurned: boolean;
@Validate(yup.string())
public burnedBy: string;
@Validate(yup.string())
public burnedDate: string;
@Mandatory()
@Validate(yup.string().required().max(2000))
public tokenUri: string;
@Embedded(ArtCollectionMetadata)
public tokenMetadata: ArtCollectionMetadata;
@Validate(yup.number())
public price: number;
@Validate(yup.boolean())
public on_sale_flag: boolean;
}
@Id("tokenId")
export class Loyalty extends OchainModel<Loyalty> {
public readonly assetType = "otoken";
@Mandatory()
@Validate(
yup
.string()
.required()
.matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/)
.max(16)
)
public tokenId: string;
@ReadOnly("loyalty")
public tokenName: string;
@Validate(yup.string().trim().max(256))
public tokenDesc: string;
@ReadOnly("erc1155+")
public tokenStandard: string;
@ReadOnly("fungible")
public tokenType: string;
@ReadOnly("fractional")
public tokenUnit: string;
@ReadOnly(["divisible","mintable","transferable","burnable","roles"])
public behaviors: string[];
@ReadOnly({ minter_role_name: "minter" })
public roles: object;
@ReadOnly({ max_mint_quantity: 10000 })
public mintable: object;
@ReadOnly({ decimal: 2 })
public divisible: object;
@Validate(yup.string())
public currency_name: string;
@Validate(yup.number())
public token_to_currency_ratio: number;
}
다음 모델은 소수의 non-fungible 토큰을 보여줍니다.export class RealEstatePropertyMetadata extends EmbeddedModel<RealEstatePropertyMetadata> {
@Validate(yup.string())
public propertyType: string;
@Validate(yup.string())
public propertyName: string;
@Validate(yup.string())
public propertyAddress: string;
@Validate(yup.string())
public propertyImage: string;
}
@Id("tokenId")
export class RealEstateProperty extends OchainModel<RealEstateProperty> {
public readonly assetType = "otoken";
@Mandatory()
@Validate(
yup
.string()
.required()
.matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/)
.max(16)
)
public tokenId: string;
@ReadOnly("realestateproperty")
public tokenName: string;
@Validate(yup.string().trim().max(256))
public tokenDesc: string;
@ReadOnly("erc1155+")
public tokenStandard: string;
@ReadOnly("nonfungible")
public tokenType: string;
@ReadOnly("fractional")
public tokenUnit: string;
@ReadOnly(["divisible","mintable","transferable","roles"])
public behaviors: string[];
@ReadOnly({ minter_role_name: "minter" })
public roles: object;
@ReadOnly({ max_mint_quantity: 0 })
public mintable: object;
@Validate(yup.number().positive())
public quantity: number;
@Validate(yup.string())
public createdBy: string;
@Validate(yup.string())
public creationDate: string;
@ReadOnly({ decimal: 0 })
public divisible: object;
@Validate(yup.bool())
public isBurned: boolean;
@Mandatory()
@Validate(yup.string().required().max(2000))
public tokenUri: string;
@Embedded(RealEstatePropertyMetadata)
public tokenMetadata: RealEstatePropertyMetadata;
@Validate(yup.number())
public propertySellingPrice: number;
@Validate(yup.number())
public propertyRentingPrice: number;
}
제어 장치
기본 컨트롤러 클래스는 OchainController
클래스를 확장합니다. 기본 컨트롤러는 하나만 있습니다.
export class DigiCurrCCController extends OchainController{
원하는 수의 클래스, 함수 또는 파일을 생성할 수 있지만 기본 컨트롤러 클래스 내에 정의된 메소드만 호출할 수 있습니다. 다른 메소드는 숨겨져 있습니다.
토큰 SDK 메소드를 사용하여 비즈니스 애플리케이션에 대한 사용자정의 메소드를 작성할 수 있습니다.
자동으로 생성된 토큰 메소드
Blockchain App Builder는 토큰 및 토큰 수명 주기를 지원하는 방법을 자동으로 생성합니다. 이러한 방법을 사용하여 토큰을 초기화하고, 역할 및 계정을 관리하고, 추가 코딩 없이 다른 토큰 수명 주기 작업을 완료할 수 있습니다. 컨트롤러 메소드에는 호출할 수 있는 @Validator(...params)
데코레이터가 있어야 합니다.
액세스 제어 관리 방법
-
isTokenAdmin
- 이 메소드는 함수 호출자가
Token Admin
인 경우 부울 값true
를 반환하고, 그렇지 않은 경우false
를 반환합니다. 이 메소드는 체인 코드의Token Admin
만 호출할 수 있습니다. -
addTokenAdmin
- 이 메소드는 사용자를 체인 코드의
Token Admin
로 추가합니다. 이 메소드는 체인 코드의Token Admin
만 호출할 수 있습니다. -
removeTokenAdmin
- 이 메소드는 사용자를 체인 코드의
Token Admin
로 제거합니다. 이 메소드는 체인 코드의Token Admin
만 호출할 수 있습니다. 자신을Token Admin
로 제거할 수 없습니다. -
getAllTokenAdmins
- 이 메소드는 체인 코드의
Token Admin
인 모든 사용자 목록을 반환합니다. 이 메소드는 체인 코드의Token Admin
만 호출할 수 있습니다.
토큰 구성 관리 방법
-
init
- 이 메소드는 체인 코드가 인스턴스화될 때 호출됩니다. 모든
Token Admin
는adminList
매개변수의userId
및orgId
정보로 식별됩니다.userId
은 인스턴스 소유자 또는 인스턴스에 로그인한 사용자의 사용자 이름 또는 전자메일 ID입니다.orgId
는 현재 네트워크 조직에 있는 사용자의 MSP(멤버쉽 서비스 공급자) ID입니다. 체인코드를 처음 배치할 때는adminList
매개변수가 필수입니다. 체인코드를 업그레이드하는 경우 빈 목록([]
)을 전달합니다. 체인코드를 처음 배포한 사용자인 경우 체인코드를 업그레이드할 때adminList
매개변수에 새 관리자를 지정할 수도 있습니다. 업그레이드 중adminList
매개변수의 기타 모든 정보는 무시됩니다. -
create<Token Name>Token
- 이 방법은 토큰을 만듭니다. 정의된 모든 토큰에는 고유한 생성 메소드가 있습니다. 대체 가능한 토큰의 경우 이 메소드는 체인 코드의
Token Admin
에 의해서만 호출될 수 있습니다. 실행할 수 없는 토큰의 경우 minter 역할이 사양 파일에 정의된 경우 minter 역할을 가진 모든 사용자가 이 메소드를 호출하여 NFT를 생성할 수 있습니다. minter 롤이 정의되지 않은 경우 모든 사용자가 이 메소드를 사용하여 NFT를 생성(민트)할 수 있습니다. 이 메소드를 호출하는 유저는 NFT의 소유자가 됩니다. -
update<Token Name>Token
- 이 방법은 토큰을 업데이트합니다. 정의된 모든 토큰에는 고유한 업데이트 방법이 있습니다. 토큰 메타데이터 또는 사용할 수 없는 토큰의 토큰 URI를 업데이트할 수 없습니다. 대체 가능한 토큰의 경우 이 메소드는 체인 코드의
Token Admin
에 의해서만 호출될 수 있습니다. 사용할 수 없는 토큰의 경우 이 메소드는 토큰 소유자에 의해서만 호출될 수 있습니다. -
getTokenHistory
- 이 메소드는 지정된 토큰 ID에 대한 내역을 반환합니다. 누구나 이 메서드를 호출할 수 있습니다.
-
getAllTokens
- 이 메소드는 상태 데이터베이스에 저장된 모든 토큰 자산을 반환합니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. 이 방법은 Berkeley DB SQL 서식 있는 질의를 사용하며 원격 Oracle Blockchain Platform 네트워크에 접속된 경우에만 호출할 수 있습니다. -
getTokenById
- 이 메소드는 토큰이 상태 데이터베이스에 있는 경우 토큰 객체를 반환합니다. 소수 NFT의 경우 소유자 목록도 반환됩니다. 이 메소드는 체인 코드의
Token Admin
또는 토큰 소유자에 의해서만 호출될 수 있습니다. -
getAllTokensByUser
- 이 메소드는 지정된 사용자가 소유한 토큰 자산을 모두 반환합니다. 이 방법은 Berkeley DB SQL 서식 있는 질의를 사용하며 원격 Oracle Blockchain Platform 네트워크에 접속된 경우에만 호출할 수 있습니다. 이 메소드는 체인 코드의
Token Admin
또는 계정 소유자가 호출할 수 있습니다. -
ownerOf
- 이 메소드는 지정된 토큰 ID의 소유자의 계정 ID, 조직 ID 및 사용자 ID를 반환합니다. 누구나 이 메서드를 호출할 수 있습니다.
-
URI
- 이 메소드는 지정된 토큰의 URI를 반환합니다. 누구나 이 메서드를 호출할 수 있습니다.
-
name
- 이 메소드는 토큰 클래스의 이름을 반환합니다. 누구나 이 메서드를 호출할 수 있습니다.
-
totalSupply
- 이 메소드는 연마된 총 토큰 수를 반환합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. -
totalNetSupply
- 이 메소드는 연마된 총 토큰 수에서 연소된 토큰 수를 뺀 값을 반환합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. -
getTokensByName
- 이 메소드는 지정된 토큰 이름에 대한 모든 토큰 자산을 반환합니다. 이 방법은 Berkeley DB SQL 서식 있는 질의를 사용하며 원격 Oracle Blockchain Platform 네트워크에 접속된 경우에만 호출할 수 있습니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. -
getTokenDecimal
- 이 메소드는 지정된 토큰에 대한 소수점 자릿수를 반환합니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다.
계정 관리 방법
-
createAccount
- 이 메소드는 지정된 사용자에 대한 계정을 생성하고 대체 가능 또는 실행 불가능 토큰에 대한 연관된 토큰 계정을 생성합니다. 언제든 토큰이 있는 사용자에 대해 계정을 만들어야 합니다. 사용자 계정은 사용자가 보유한 NFT 계정 및 대체 가능한 토큰 계정을 추적합니다. 토큰 관련 작업을 완료하려면 사용자에게 네트워크에 계정이 있어야 합니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다.사용자 계정에는
orgId
매개변수의 SHA-256 해시 및userId
매개변수로 구성된 고유 ID가 있습니다.사용자는 고유한 계정 ID를 가진 다중 대체 가능 토큰 계정을 가질 수 있습니다. Fungible 토큰 계정 ID는
orgId
매개변수의 SHA-256 해시,userId
매개변수, 틸드 기호(~
)로 구분된 상수 문자열ft
및 틸드 기호(~
)로 구분되는 생성 중인 Fungible 계정의 인덱스를 나타내는 카운터 번호로 구성됩니다.사용자는 하나의 비공개 토큰 계정만 가질 수 있습니다. 제거할 수 없는 토큰 계정 ID는 고유하며
orgId
매개변수의 SHA-256 해시,userId
매개변수 및 틸드 기호(~
)로 구분된 상수 문자열nft
에 의해 형성됩니다. 사용자가 소유하는 모든 실행 불가능 토큰(전체 또는 소수)은 이 계정에 연결됩니다.사용자 계정 ID는
ouaccount~
로 시작합니다. 토큰 계정 ID는oaccount~
로 시작합니다. -
createUserAccount
- 이 방법은 지정된 사용자의 계정을 만듭니다. 언제든 토큰이 있는 사용자에 대해 계정을 만들어야 합니다. 사용자 계정은 NFT 계정 및 사용자가 보유한 대체 가능한 토큰 계정을 추적합니다. 토큰 관련 작업을 완료하려면 사용자에게 네트워크에 계정이 있어야 합니다.
계정 ID는
orgId
매개변수 및userId
매개변수의 SHA-256 해시입니다. 이 메소드는 체인 코드의Token Admin
만 호출할 수 있습니다. -
createTokenAccount
- 이 메소드는 사용자 계정과 연관시킬 대체 가능 또는 실행 불가능 토큰 계정을 생성합니다.
사용자는 고유한 계정 ID를 가진 다중 대체 가능 토큰 계정을 가질 수 있습니다. Fungible 토큰 계정 ID는
orgId
매개변수의 SHA-256 해시,userId
매개변수, 틸드 기호(~
)로 구분된 상수 문자열ft
및 틸드 기호(~
)로 구분되는 생성 중인 Fungible 계정의 인덱스를 나타내는 카운터 번호로 구성됩니다.사용자는 하나의 비공개 토큰 계정만 가질 수 있습니다. 제거할 수 없는 토큰 계정 ID는 고유하며
orgId
매개변수의 SHA-256 해시,userId
매개변수 및 틸드 기호(~
)로 구분된 상수 문자열nft
에 의해 형성됩니다. 사용자가 소유하는 모든 실행 불가능 토큰(전체 또는 소수)은 이 계정에 연결됩니다.이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. -
associateFungibleTokenAccount
- 이 메소드는 사용자의 대체 가능 토큰 계정을 특정 대체 가능 토큰에 연관시킵니다.
이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. -
getAccountHistory
- 이 메소드는 지정된 토큰 계정에 대한 내역을 반환합니다. 비동기 방식입니다. 이 메소드는 체인 코드의
Token Admin
또는 계정 소유자가 호출할 수 있습니다. -
getAccount
- 이 메소드는 지정된 사용자에 대한 토큰 계정 세부정보를 반환합니다. 이 메소드는 체인 코드의
Token Admin
또는 계정의Account Owner
에 의해서만 호출될 수 있습니다. -
getAllAccounts
- 이 메소드는 모든 사용자 계정의 세부정보를 반환합니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. -
getAccountDetailsByUser
- 이 메소드는 지정된 사용자에 대한 계정 요약 및 사용자와 연관된 대체 가능 및 실행 불가능 토큰의 세부정보를 반환합니다. 이 메소드는 체인 코드의
Token Admin
또는 계정의Account Owner
에 의해서만 호출될 수 있습니다. -
getUserByAccountId
- 이 메소드는 지정된 계정 ID의 사용자 세부정보를 반환합니다. 이 메소드는 모든 사용자가 호출할 수 있습니다.
역할 관리 방법
-
addRole
- 이 메소드는 지정된 사용자 및 토큰에 롤을 추가합니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다. 지정된 사용자에게 대체 가능 토큰과 연계된 토큰 계정 또는 NFT 역할에 대한 비공개 토큰 계정이 있어야 합니다. 토큰에 대한 사양 파일에 지정된 역할이 있어야 합니다. -
isInRole
- 이 메소드는 사용자에게 지정된 롤이 있는지 여부를 나타내는 부울 값을 반환합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다. 이 메소드는 체인 코드의
Token Admin
또는 계정의Account Owner
에 의해서만 호출될 수 있습니다. 지정된 사용자에게 대체 가능 토큰과 연계된 토큰 계정 또는 NFT 역할에 대한 비공개 토큰 계정이 있어야 합니다. 토큰에 대한 사양 파일에 지정된 역할이 있어야 합니다. -
removeRole
- 이 메소드는 지정된 사용자 및 토큰에서 롤을 제거합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. 지정된 사용자에게 대체 가능 토큰과 연계된 토큰 계정 또는 NFT 역할에 대한 비공개 토큰 계정이 있어야 합니다. 토큰에 대한 사양 파일에 지정된 역할이 있어야 합니다. -
getAccountsByRole
- 이 메소드는 지정된 롤 및 토큰에 대한 모든 계정 ID 목록을 반환합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. -
getUsersByRole
- 이 메소드는 지정된 롤 및 토큰에 대한 모든 사용자 목록을 반환합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다.
트랜잭션 내역 관리 방법
-
getAccountTransactionHistory
- 이 방법은 계정 트랜잭션 기록을 반환합니다. 이 메소드는 체인 코드의
Token Admin
또는 계정 소유자가 호출할 수 있습니다. 실행 불가능한 토큰의 경우 이 방법은 원격 Oracle Blockchain Platform 네트워크에 연결된 경우에만 호출할 수 있습니다. -
getTransactionById
- 이 메소드는 지정된 트랜잭션 ID에 대한 트랜잭션 세부정보를 반환합니다. 누구나 이 메서드를 호출할 수 있습니다.
-
deleteHistoricalTransactions
- 이 메소드는 상태 데이터베이스에서 지정된 시간 기록 이전의 트랜잭션을 삭제합니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다.
토큰 동작 관리 방법 - 민트 가능 동작
-
mintBatch
- 이 메소드는 일괄 처리 작업에 여러 토큰을 생성(분)합니다. 이 방법은 대체할 수 없는 토큰 또는 소수의 불충분한 토큰만 만듭니다.
대체 가능한 토큰의 경우 최소값 역할이 사양 파일에 정의된 경우 최소값 역할을 가진 모든 사용자가 이 메소드를 호출할 수 있습니다. 그렇지 않은 경우 모든 사용자가 이 방법을 사용하여 토큰을 민트할 수 있습니다. 토큰을 만들거나 업데이트할 때 해당 등록 정보가 지정된 경우 토큰의
max_mint_quantity
등록 정보를 초과하여 민트할 수 없습니다.사용할 수 없는 토큰의 경우 minter 역할이 사양 파일에 정의되어 있으면 minter 역할을 가진 모든 사용자가 이 메서드를 호출할 수 있습니다. 그렇지 않은 경우 모든 사용자가 이 방법을 사용하여 토큰을 민트할 수 있습니다. 또한 호출자는 토큰의 생성자여야 합니다. 분화될 수 있는 소수 표시 불가능 토큰의 수량에는 상한이 없습니다.
이 메소드를 사용하여 완전하게 실행 불가능한 토큰을 채울 수 없습니다.
토큰 동작 관리 방법 - 이전 가능한 동작
-
batchTransferFrom
- 이 메소드는 한 유저에서 다른 유저로 토큰 ID 리스트에 지정된 토큰을 전송하는 일괄 처리 작업을 완료합니다.
NFT의 경우 NFT의 소유권을 이전하기 때문에 NFT의 발신자가 토큰을 소유해야 합니다.
소수 NFT의 경우 사용자(토큰 생성자 포함)가 소유한 모든 공유를 전송하면 토큰의 소유권을 잃게 됩니다. 토큰의 공유가 사용자에게 전송되는 경우 해당 사용자는 자동으로 소수 NFT의 소유자 중 하나가 됩니다.
이 메소드는 메소드의 호출자가 지정된 발신자인지 검증하지 않습니다. 이 메소드는 모든 사용자가 호출할 수 있습니다.
-
safeBatchTransferFrom
- 이 메소드는 한 유저에서 다른 유저로 토큰 ID 리스트에 지정된 토큰을 전송하는 일괄 처리 작업을 완료합니다.
NFT의 경우 NFT의 소유권을 이전하기 때문에 NFT의 발신자가 토큰을 소유해야 합니다.
소수 NFT의 경우 사용자(토큰 생성자 포함)가 소유한 모든 공유를 전송하면 토큰의 소유권을 잃게 됩니다. 토큰의 공유가 사용자에게 전송되는 경우 해당 사용자는 자동으로 소수 NFT의 소유자 중 하나가 됩니다.
메소드의 호출자는 지정된 발신자여야 합니다. 이 메소드는 모든 사용자가 호출할 수 있습니다.
-
balanceOfBatch
- 이 메소드는 토큰 계정의 잔액을 가져오는 일괄 처리 작업을 완료합니다. 계정 세부정보는 세 개의 개별 조직 ID 목록, 사용자 ID 및 토큰 ID에 지정됩니다. 이 메소드는 체인 코드의
Token Admin
또는 계정 소유자만 호출할 수 있습니다. 계정 소유자는 자신이 소유한 계정에 대해서만 잔액 세부정보를 볼 수 있습니다. -
exchangeToken
- 이 방법은 지정된 계정 간에 토큰을 교환합니다. 이 방법은 NFT와 fungible 토큰 또는 fungible 토큰과 NFT 간의 교환 만 지원합니다. NFT는 전체 또는 소수일 수 있습니다. 이 방법은 계정 소유자만 호출할 수 있습니다.
토큰 동작 관리 방법 - 굽기 가능한 동작
SDK 메소드
액세스 제어 관리 방법
-
checkAuthorization
- 이 방법을 사용하여 작업에 액세스 제어 검사를 추가합니다. 비동기 함수입니다. 특정 토큰 메소드는 토큰의
Token Admin
또는AccountOwner
또는 여러 계정이 있는 사용자의 경우MultipleAccountOwner
에 의해서만 실행할 수 있습니다. 액세스 제어 매핑은../lib/constant.ts
파일에 설명되어 있습니다.../lib/constant.ts
파일을 편집하여 액세스 제어를 수정할 수 있습니다. 고유의 액세스 제어를 사용하거나 액세스 제어를 사용 안함으로 설정하려면 자동으로 생성된 컨트롤러 메소드 및 사용자 정의 메소드에서 액세스 제어 코드를 제거합니다.ADMIN: { isUserTokenAdmin: ["Admin"], addAdmin: ["Admin"], removeAdmin: ["Admin"], getAllAdmins: ["Admin"], }, TOKEN: { save: ["Admin"], getAllTokens: ["Admin"], get: ["Admin"], update: ["Admin"], getDecimals: ["Admin"], getTokensByName: ["Admin"], addRoleMember: ["Admin"], removeRoleMember: ["Admin"], isInRole: ["Admin", "AccountOwner"], getTotalMintedTokens: ["Admin"], getNetTokens: ["Admin"], getTokenHistory: ["Admin"], }, ROLE: { getAccountsByRole: ["Admin"], getUsersByRole: ["Admin"], }, TRANSACTION: { deleteTransactions: ["Admin"], }, ACCOUNT: { createAccount: ["Admin"], associateToken: ["Admin"], getAllAccounts: ["Admin"], getAccountsByUser: ["Admin", "MultipleAccountOwner"], getAccount: ["Admin", "AccountOwner"], history: ["Admin", "AccountOwner"], getAccountTransactionHistory: ["Admin", "AccountOwner"], getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"], getSubTransactionsById: ["Admin", TRANSACTION_INVOKER], getSubTransactionsByIdWithFilters: ["Admin", TRANSACTION_INVOKER], getAccountBalance: ["Admin", "AccountOwner"], getAccountOnHoldBalance: ["Admin", "AccountOwner"], getOnHoldIds: ["Admin", "AccountOwner"], getConversionHistory: ["Admin", "AccountOwner"], }, ACCOUNT_STATUS: { get: ["Admin", "AccountOwner"], history: ["Admin", "AccountOwner"], activateAccount: ["Admin"], suspendAccount: ["Admin"], deleteAccount: ["Admin"], }, TOKEN_CONVERSION: { initializeExchangePoolUser: ["Admin"], addConversionRate: ["Admin"], updateConversionRate: ["Admin"], getConversionRate: ["Admin", "AnyAccountOwner"], getConversionRateHistory: ["Admin", "AnyAccountOwner"], tokenConversion: ["Admin", "AnyAccountOwner"], getExchangePoolUser: ["Admin"], }, ERC721ADMIN: { isUserTokenAdmin: ["Admin"], addAdmin: ["Admin"], removeAdmin: ["Admin"], getAllAdmins: ["Admin"], }, ERC721TOKEN: { getAllTokens: ["Admin"], getAllTokensByUser: ["Admin", "AccountOwner"], get: ["Admin", TOKEN_OWNER], getTokensByName: ["Admin"], addRoleMember: ["Admin"], removeRoleMember: ["Admin"], isInRole: ["Admin", "AccountOwner"], totalSupply: ["Admin"], totalNetSupply: ["Admin"], history: ["Admin"], }, ERC721ROLE: { getAccountsByRole: ["Admin"], getUsersByRole: ["Admin"], }, ERC721TRANSACTION: { deleteTransactions: ["Admin"], }, ERC721ACCOUNT: { createAccount: ["Admin"], getAllAccounts: ["Admin"], getAccountByUser: ["Admin", "MultipleAccountOwner"], history: ["Admin", "AccountOwner"], getAccountTransactionHistory: ["Admin", "AccountOwner"], getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"], balanceOf: ["Admin", "MultipleAccountOwner"], }, ERC1155ADMIN: { isUserTokenAdmin: ["Admin"], addAdmin: ["Admin"], removeAdmin: ["Admin"], getAllAdmins: ["Admin"], }, ERC1155TOKEN: { getAllTokens: ["Admin"], get: ["Admin", TOKEN_OWNER], getAllTokensByUser: ["Admin", "AccountOwner"], totalSupply: ["Admin"], totalNetSupply: ["Admin"], getTokensByName: ["Admin"], getDecimals: ["Admin"], addRoleMember: ["Admin"], removeRoleMember: ["Admin"], isInRole: ["Admin", "AccountOwner"], save: ["Admin"], update: ["Admin"], }, ERC1155ACCOUNT: { createAccount: ["Admin"], createUserAccount: ["Admin"], createTokenAccount: ["Admin"], associateFungibleTokenToAccount: ["Admin", "AccountOwner"], getAccountsByUser: ["Admin", "AccountOwner"], getAccount: ["Admin", "AccountOwner"], history: ["Admin", "AccountOwner"], getAllAccounts: ["Admin"], balanceOfBatch: ["Admin"], getAccountTransactionHistory: ["Admin", "AccountOwner"], getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"], exchangeToken: ["AccountOwner"], getAccountDetailsByUser: ["Admin", "AccountOwner"], }, ERC1155ROLE: { getAccountsByRole: ["Admin"], getUsersByRole: ["Admin"], },
-
isUserTokenAdmin
- 이 메소드는 지정된 사용자가
Token Admin
인 경우 부울 값true
를 반환하고, 그렇지 않은 경우false
를 반환합니다. 이 메소드는 토큰 체인 코드의Token Admin
에 의해서만 호출될 수 있습니다. -
addAdmin
- 이 메소드는 사용자를 토큰 체인 코드의
Token Admin
로 추가합니다. 이 메소드는 토큰 체인 코드의Token Admin
에 의해서만 호출될 수 있습니다. -
removeAdmin
- 이 메소드는 사용자를 토큰 체인 코드의
Token Admin
로 제거합니다. 이 메소드는 토큰 체인 코드의Token Admin
에 의해서만 호출될 수 있습니다. 자신을Token Admin
로 제거할 수 없습니다. -
getAllAdmins
- 이 메소드는 모든
Token Admin
사용자 목록을 반환합니다.
토큰 구성 관리 방법
-
save
- 이 방법은 토큰을 만듭니다. 정의된 모든 토큰에는 고유한 생성 메소드가 있습니다. 실행할 수 없는 토큰의 경우 minter 역할이 사양 파일에 정의되어 있으면 minter 역할을 가진 모든 사용자가 이 메소드를 호출하여 NFT를 생성할 수 있습니다. 그렇지 않은 경우 모든 사용자가 이 방법을 사용하여 NFT를 생성(민트)할 수 있습니다. 이 메소드를 호출하는 유저는 NFT의 소유자(전체 또는 소수)가 됩니다.
-
update
- 이 방법은 토큰을 업데이트합니다. 토큰 메타데이터 또는 사용할 수 없는 토큰의 토큰 URI를 업데이트할 수 없습니다.
-
history (Token)
- 이 메소드는 지정된 토큰 ID에 대한 내역을 반환합니다.
-
getAllTokens
- 이 메소드는 상태 데이터베이스에 저장된 모든 토큰 자산을 반환합니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. 이 방법은 Berkeley DB SQL 서식 있는 질의를 사용하며 원격 Oracle Blockchain Platform 네트워크에 접속된 경우에만 호출할 수 있습니다. -
get (Token)
- 이 메소드는 토큰이 상태 데이터베이스에 있는 경우 토큰 객체를 반환합니다. 이 메소드는 체인 코드의
Token Admin
또는 토큰 소유자에 의해서만 호출될 수 있습니다. -
getAllTokensByUser
- 이 메소드는 지정된 사용자가 소유한 토큰 자산을 모두 반환합니다. 이 방법은 Berkeley DB SQL 서식 있는 질의를 사용하며 원격 Oracle Blockchain Platform 네트워크에 접속된 경우에만 호출할 수 있습니다.
-
ownerOf
- 이 메소드는 지정된 토큰 ID의 소유자의 계정 ID, 조직 ID 및 사용자 ID를 반환합니다.
-
tokenURI
- 이 메소드는 지정된 토큰의 URI를 반환합니다. 누구나 이 메서드를 호출할 수 있습니다.
-
name
- 이 메소드는 토큰 클래스의 이름을 반환합니다. 누구나 이 메서드를 호출할 수 있습니다.
-
totalSupply
- 이 메소드는 연마된 총 토큰 수를 반환합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다.
-
totalNetSupply
- 이 메소드는 연마된 총 토큰 수에서 연소된 토큰 수를 뺀 값을 반환합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다.
-
getTokensByName
- 이 메소드는 지정된 토큰 이름에 대한 모든 토큰 자산을 반환합니다. 이 방법은 Berkeley DB SQL 서식 있는 질의를 사용하며 원격 Oracle Blockchain Platform 네트워크에 접속된 경우에만 호출할 수 있습니다.
-
getDecimals
- 이 메소드는 지정된 토큰에 대한 소수점 자릿수를 반환합니다. 토큰에 대해 분할 가능한 동작이 지정되지 않은 경우 기본값 0 소수점 자릿수가 반환됩니다.
계정 관리 방법
-
createAccount
- 이 메소드는 지정된 사용자에 대한 계정을 생성하고 대체 가능 또는 실행 불가능 토큰에 대한 연관된 토큰 계정을 생성합니다. 언제든 토큰이 있는 사용자에 대해 계정을 만들어야 합니다. 사용자 계정은 NFT 계정 및 사용자가 보유한 대체 가능한 토큰 계정을 추적합니다. 토큰 관련 작업을 완료하려면 사용자에게 네트워크에 계정이 있어야 합니다. 이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다.사용자 계정에는
orgId
매개변수의 SHA-256 해시 및userId
매개변수로 구성된 고유 ID가 있습니다.사용자는 고유한 계정 ID를 가진 다중 대체 가능 토큰 계정을 가질 수 있습니다. Fungible 토큰 계정 ID는
orgId
매개변수의 SHA-256 해시,userId
매개변수, 틸드 기호(~
)로 구분된 상수 문자열ft
및 틸드 기호(~
)로 구분되는 생성 중인 Fungible 계정의 인덱스를 나타내는 카운터 번호로 구성됩니다.사용자는 하나의 비공개 토큰 계정만 가질 수 있습니다. 제거할 수 없는 토큰 계정 ID는 고유하며
orgId
매개변수의 SHA-256 해시,userId
매개변수 및 틸드 기호(~
)로 구분된 상수 문자열nft
에 의해 형성됩니다. 사용자가 소유하는 모든 실행 불가능 토큰(전체 또는 소수)은 이 단일 실행 불가능 토큰 계정에 연결됩니다. -
createUserAccount
- 이 방법은 지정된 사용자의 계정을 만듭니다. 언제든 토큰이 있는 사용자에 대해 계정을 만들어야 합니다. 사용자 계정은 NFT 계정 및 사용자가 보유한 대체 가능한 토큰 계정을 추적합니다. 토큰 관련 작업을 완료하려면 사용자에게 네트워크에 계정이 있어야 합니다.
계정 ID는
orgId
매개변수와userId
매개변수의 SHA-256 해시입니다. 이 메소드는 체인 코드의Token Admin
만 호출할 수 있습니다. -
createTokenAccount
- 이 메소드는 사용자 계정과 연관시킬 대체 가능 또는 실행 불가능 토큰 계정을 생성합니다.
사용자는 고유한 계정 ID를 가진 다중 대체 가능 토큰 계정을 가질 수 있습니다. Fungible 토큰 계정 ID는
orgId
매개변수의 SHA-256 해시,userId
매개변수, 틸드 기호(~
)로 구분된 상수 문자열ft
및 틸드 기호(~
)로 구분되는 생성 중인 Fungible 계정의 인덱스를 나타내는 카운터 번호로 구성됩니다.사용자는 하나의 비공개 토큰 계정만 가질 수 있습니다. 제거할 수 없는 토큰 계정 ID는 고유하며
orgId
매개변수의 SHA-256 해시,userId
매개변수 및 틸드 기호(~
)로 구분된 상수 문자열nft
에 의해 형성됩니다. 사용자가 소유하는 모든 실행 불가능 토큰(전체 또는 소수)은 이 단일 실행 불가능 토큰 계정에 연결됩니다.이 메소드는 체인 코드의
Token Admin
만 호출할 수 있습니다. -
associateTokenToToken
- 이 메소드는 사용자의 대체 가능 토큰 계정을 특정 대체 가능 토큰에 연관시킵니다.
-
getAccountHistory
- 이 메소드는 지정된 토큰 계정에 대한 내역을 반환합니다.
-
getAccountWithStatus
- 이 메소드는 지정된 사용자에 대한 계정 상태를 포함한 토큰 계정 세부정보를 반환합니다. 이 메소드는 체인 코드의
Token Admin
또는 계정의Account Owner
에 의해서만 호출될 수 있습니다. -
getAccount
- 이 메소드는 지정된 사용자에 대한 토큰 계정 세부정보를 반환합니다. 이 메소드는 체인 코드의
Token Admin
또는 계정의Account Owner
에 의해서만 호출될 수 있습니다. -
getAllAccounts
- 이 메소드는 모든 사용자 계정의 세부정보를 반환합니다.
-
getAccountDetailsByUser
- 이 메소드는 지정된 사용자에 대한 계정 요약 및 사용자와 연관된 대체 가능 및 실행 불가능 토큰의 세부정보를 반환합니다.
-
getUserByAccountId
- 이 메소드는 지정된 계정 ID의 사용자 세부정보를 반환합니다.
역할 관리 방법
-
AddRoleMember
- 이 메소드는 지정된 사용자 및 토큰에 롤을 추가합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다.
-
isInRole
- 이 메소드는 사용자에게 지정된 롤이 있는지 여부를 나타내는 부울 값을 반환합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다.
-
removeRoleMember
- 이 메소드는 지정된 사용자 및 토큰에서 롤을 제거합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다.
-
getAccountsByRole
- 이 메소드는 지정된 롤 및 토큰에 대한 모든 계정 ID 목록을 반환합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다.
-
getUsersByRole
- 이 메소드는 지정된 롤 및 토큰에 대한 모든 사용자 목록을 반환합니다. 사용 가능한 토큰은 토큰 ID로 지정됩니다. 사용할 수 없는 토큰은 토큰 이름으로 지정됩니다.
트랜잭션 내역 관리 방법
-
getAccountTransactionHistory
- 이 방법은 계정 트랜잭션 기록을 반환합니다. 이 메소드는 체인 코드의
Token Admin
또는 계정 소유자가 호출할 수 있습니다. 실행 불가능한 토큰의 경우 이 방법은 원격 Oracle Blockchain Platform 네트워크에 연결된 경우에만 호출할 수 있습니다. -
getTransactionById
- 이 메소드는 지정된 트랜잭션 ID에 대한 트랜잭션 세부정보를 반환합니다.
-
deleteTransactions
- 이 메소드는 상태 데이터베이스에서 지정된 시간 기록 이전의 트랜잭션을 삭제합니다.
토큰 동작 관리 방법 - 민트 가능 동작
-
mintBatch
- 이 메소드는 일괄 처리 작업에 여러 토큰을 생성(분)합니다. 이 방법은 대체할 수 없는 토큰 또는 소수의 불충분한 토큰만 만듭니다.
대체 가능한 토큰의 경우 최소값 역할이 사양 파일에 정의된 경우 최소값 역할을 가진 모든 사용자가 이 메소드를 호출할 수 있습니다. 그렇지 않은 경우 모든 사용자가 이 방법을 사용하여 토큰을 민트할 수 있습니다. 토큰을 만들거나 업데이트할 때 해당 등록 정보가 지정된 경우 토큰의
max_mint_quantity
등록 정보를 초과하여 민트할 수 없습니다.사용할 수 없는 토큰의 경우 minter 역할이 사양 파일에 정의되어 있으면 minter 역할을 가진 모든 사용자가 이 메서드를 호출할 수 있습니다. 그렇지 않은 경우 모든 사용자가 이 방법을 사용하여 토큰을 민트할 수 있습니다. 또한 호출자는 토큰의 생성자여야 합니다. 분화될 수 있는 소수 표시 불가능 토큰의 수량에는 상한이 없습니다.
이 메소드를 사용하여 완전하게 실행 불가능한 토큰을 채울 수 없습니다.
토큰 동작 관리 방법 - 이전 가능한 동작
-
batchTransferFrom
- 이 메소드는 한 유저에서 다른 유저로 토큰 ID 리스트에 지정된 토큰을 전송하는 일괄 처리 작업을 완료합니다.
NFT의 경우 NFT의 소유권을 이전하기 때문에 NFT의 발신자가 토큰을 소유해야 합니다.
소수 NFT의 경우 사용자(토큰 생성자 포함)가 소유한 모든 공유를 전송하면 토큰의 소유권을 잃게 됩니다. 토큰의 공유가 사용자에게 전송되는 경우 해당 사용자는 자동으로 소수 NFT의 소유자 중 하나가 됩니다.
이 메소드는 메소드의 호출자가 지정된 발신자인지 검증하지 않습니다.
-
safeBatchtransferFrom
- 이 메소드는 한 유저에서 다른 유저로 토큰 ID 리스트에 지정된 토큰을 전송하는 일괄 처리 작업을 완료합니다.
NFT의 경우 NFT의 소유권을 이전하기 때문에 NFT의 발신자가 토큰을 소유해야 합니다.
소수 NFT의 경우 사용자(토큰 생성자 포함)가 소유한 모든 공유를 전송하면 토큰의 소유권을 잃게 됩니다. 토큰의 공유가 사용자에게 전송되는 경우 해당 사용자는 자동으로 소수 NFT의 소유자 중 하나가 됩니다.
메소드의 호출자는 지정된 발신자여야 합니다.
-
balanceOfBatch
- 이 메소드는 토큰 계정의 잔액을 가져오는 일괄 처리 작업을 완료합니다. 계정 세부정보는 세 개의 개별 조직 ID 목록, 사용자 ID 및 토큰 ID에 지정됩니다. 이 메소드는 체인 코드의
Token Admin
또는 계정 소유자만 호출할 수 있습니다. 계정 소유자는 자신이 소유한 계정에 대해서만 잔액 세부정보를 볼 수 있습니다. -
exchangeToken
- 이 방법은 지정된 계정 간에 토큰을 교환합니다. 이 방법은 NFT(전체 또는 소수)와 대체 토큰 또는 대체 토큰과 NFT(전체 또는 소수) 간의 교환만 지원합니다. 이 방법은 계정 소유자만 호출할 수 있습니다.
토큰 동작 관리 방법 - 굽기 가능한 동작