스마트 계약 생성 및 배포
스마트 계약을 생성하려면 다음 이미지의 개체 모델에 표시된 대로 블록체인에서 저장 및 관리할 개체를 정의해야 합니다.
oracle-blockchain-cms-entity.png 그림에 대한 설명
이 모든 엔티티 및 해당 관계, 엔티티를 관리하고 상호 작용하는 데 필요한 모든 논리 및 블록체인 원장에 지속하는 데 필요한 모든 논리는 스마트 계약에 정의되어 있습니다.
폴더는 NFT 토큰으로 표시되므로 NFT로 개발 및 초기화됩니다. 다른 종속 개체(문서 및 속성)는 표준 개체이며 폴더의 하위 개체이므로 초기화할 필요 없이 표준 개체로 개발됩니다.
스마트 계약이 생성되면 우리가 만든 Blockchain Network에 설치하고 배포합니다.
스마트 계약 생성
Oracle Blockchain App Builder를 구성한 후에는 사양 파일을 생성할 수 있습니다. 사양 파일은 다음 코드에 표시된 간단한 YAML 파일로 생성할 수 있습니다.
주:
GitHub에서 이 파일을 다운로드할 수도 있습니다. YAML 파일 다운로드.#
# Token asset to manage the complete lifecycle of a non-fungible token representing a folder to hold docuements.
# This specification file will generate an Smartcontract project with a non-fungible token for the folders to be maintained by the users.
#
assets:
- name: folderNFT
type: token
symbol: eDocs
standard: erc721+
anatomy:
type: nonfungible
unit: whole
behavior:
- indivisible
- singleton
- mintable:
- transferable
- burnable
- roles:
minter_role_name: minter
properties:
- name: folderHASH
type: string
- name: documents
type: document[]
metadata:
- name: folderID
type: string
mandatory: true
id: true
- name: folderType
type: string
mandatory: true
methods:
crud: [create, getById, update, delete]
others: [getHistoryById, getByRange]
- name: document
properties:
- name: docName
type: string
mandatory: true
id: true
- name: docURL
type: string
mandatory: true
- name: docHASH
type: string
mandatory: true
- name: docType
type: string
mandatory: true
- name: docProperties
type: docProperty[]
methods:
crud: [create, getById, update, delete]
others: [getHistoryById, getByRange]
- name: docProperty
type: embedded
properties:
- name: propName
type: string
mandatory: true
- name: propValue
type: string
mandatory: true
methods:
crud: [create, getById, update, delete]
others: [getHistoryById, getByRange]
customMethods:
- executeQuery
- "attachDocument(tokenId: string, docName: string, docURL: string, docHASH: string, docType: string, docProps: string[], docVals: string[])" # Attach a document to an existing folder.
- "retrieveDocuments(tokenId: string)" # Retrieve Documents of an folder.
- "transferFolder(tokenId: string, fromOrgId: string, fromUserId: string, toOrgId: string, toUserId: string)" # Transfer the folder among participants.
- "updateFolderHASH(tokenId: string, newHash: string)" # Update HASH folder
- "getFolderHASH(tokenId: string)" # Check HASH folder
이 사양 파일에서 정의된 첫번째 엔티티(folderNFT)에서 NFT 토큰 표현에 대한 모든 섹션과 속성을 볼 수 있습니다. 파일에 정의된 섹션의 개요:
- 자산: 다른 자산(표준 엔티티, FT, NFT)이 정의된 위치에 배치합니다. 각 자산 내에서 우리는 대표 자산의 종류에 따라 달라질 수있는 다른 섹션을 구별 할 수 있습니다. NFT 및 FT의 경우 다음과 같은 여러 하위 섹션이 있습니다.
- 유형/기호/표준: 이 토큰이 ERC-721 표준을 기반으로 하도록 지정하고 고유한 기호 식별자를 제공합니다.
- 해부학: NFT를 지정하고 더 작은 분수로 세분화할지 여부를 지정합니다. 요즘은 "전체"가 NFT 토큰에 대한 유일한 옵션입니다.
- 동작: 토큰을 연동할 수 있는지 여부를 정의합니다. 이 경우 연동 가능한 토큰의 최대 수는 얼마입니까? 여기서 당신은 또한 그것이 분할 할 수없는 토큰이라고 명시해야합니다, 만약 각 클래스에 대한 싱글톤, 전송 가능, 그리고 그것의 삭제와 유사한 화상 (하지만 사라지지 않습니다, 그래서 여전히 거기에 있지만 전혀 사용할 수 없습니다). 또한 이 절에서는 토큰 동작을 특정 역할로 제한할 수 있습니다.
- 메타데이터: 토큰 생성 중 설정해야 하며 나중에 변경할 수 없는 일종의 등록 정보를 정의합니다. 따라서 해당 값은 토큰의 전체 수명 동안 변경 불가능한 상태로 유지됩니다.
- 등록 정보: 폴더를 구성하는 문서 배열과 같이 토큰 수명 동안 달라질 수 있는 토큰의 표준 속성을 정의합니다.
- customMethods: 사용자정의 메소드 목록을 정의해야 하는 위치입니다. 이러한 방법의 경우 Oracle Blockchain App Builder는 구현 없이 메소드의 서명만 생성합니다. 이러한 메소드의 구현은 개발자가 구현할 수 있는 유일한 코드입니다.
다음 링크는 비즈니스 요구에 따라 모든 종류의 개체(NFT, FT 또는 표준 개체)를 구성하는 방법에 대해 설명합니다.
- 표준 엔티티입니다. 입력 사양 파일을 생성하는 방법을 참조하십시오.
- NFT로 표현된 엔티티입니다. 불가 토큰에 대한 입력 사양 파일을 참조하십시오.
- FT로 표시되는 개체는 가정 토큰에 대한 입력 사양 파일을 참조하십시오.
사양 파일이 생성되면 다음 단계에 따라 Oracle Blockchain App Builder에서 프로젝트의 스캐폴드를 생성하도록 지정할 수 있습니다.
oracle-blockchain-nft-token-oracle.zip
이제 체인코드를 사용할 준비가 되었으므로 Test Your Chaincode on a Local Hyperledger Fabric Network의 지침에 따라 로컬에서 체인코드를 배포하고 테스트할 수 있습니다.
스마트 계약 배포
체인코드를 로컬에서 테스트했으면 다음을 수행하여 이전에 Oracle Blockchain Service Console을 사용하여 생성한 실제 네트워크에 해당 체인코드를 배포합니다.
- chaincode 프로젝트를 패키지화합니다.
- 단일 인스턴스(설립자)에 체인코드 패키지 설치 및 배포
- 체인 코드 프로젝트에서 배치 가능한 패키지를 생성합니다. Visual Studio에서 체인코드 프로젝트 이름 위에 있는 오른쪽 단추를 누르고 팝업 메뉴에서 패키지 옵션을 선택한 다음 체인코드 패키지 파일을 저장할 디렉토리를 선택합니다.
- Oracle Blockchain Service Console에 액세스하여 설립자 인스턴스에 체인코드 패키지를 설치하고 배포합니다.
- 체인 코드 탭으로 이동하고 새 체인 코드 배포를 누릅니다.
- 고급 배치 옵션을 선택합니다.
- 체인 코드 패키지를 설립자 인스턴스에 설치할 모든 값을 설정하고 다음을 누릅니다.
- 패키지 레이블: 다른 기존 채널에 설치된 패키지를 식별하는 데 유용한 이름을 제공합니다. 여러 채널에 배포된 동일한 스마트 계약의 버전을 두 개 이상 사용할 수 있으므로 다음과 같이 패키지 레이블 이름을 설정하는 것이 좋습니다.
<smartContractName>_<channel>_<version>
- 체인코드 언어: 체인코드를 개발한 언어를 기반으로 여러 언어 중에서 선택합니다.
- 대상 피어: 체인코드 패키지를 설치할 피어를 선택합니다.
- 패키지화된 체인코드임: zip 파일을 업로드하는 경우 이 체크박스를 선택 취소된 상태로 둡니다.
tar.gz
파일의 확인란을 선택합니다. - 체인코드 소스: 체인코드 파일 업로드를 누르고 체인코드 zip 파일을 선택합니다.
- 패키지 레이블: 다른 기존 채널에 설치된 패키지를 식별하는 데 유용한 이름을 제공합니다. 여러 채널에 배포된 동일한 스마트 계약의 버전을 두 개 이상 사용할 수 있으므로 다음과 같이 패키지 레이블 이름을 설정하는 것이 좋습니다.
- 설치가 성공하면 성공 메시지가 표시됩니다. 다음 단계는 선택한 채널에 체인 코드를 배포하는 것입니다. 따라서 배포 단계와 관련된 모든 값을 설정하고 다음을 눌러야 합니다.
- 채널: 스마트 계약을 배포할 채널을 선택합니다.
- 체인코드 이름: 스마트 계약이 채널에 배포될 이름을 설정합니다.
- 버전: 이 배치에 번호를 지정합니다. 이 배치는 이전에 설치된 패키지와 일치합니다. 이렇게 하면 설치된 패키지와 다른 채널에 배포된 체인코드를 상관시킬 수 있습니다.
- 초기 필요: 사용자 트랜잭션을 허용하기 전에 체인 코드의
init
메소드를 호출해야 하는 경우 이 체크박스를 선택합니다. - 보증 정책: 배치 중 보증 정책을 지정합니다. 이 솔루션 플레이북 예에서는 보증 정책을 사용하지 않습니다.
- 전용 데이터 수집: 필요한 경우 전용 데이터 수집을 설정합니다. 이 솔루션 플레이북 예에서는 개인 데이터 수집을 설정하지 않습니다.
스마트 계약 초기화
FT 및 NFT 토큰을 처리할 때는 비즈니스 방법을 실행하기 전에 실행할 관리 작업 세트가 있습니다. Oracle Blockchain을 사용하면 모든 관리 작업을 간단한 REST 호출로 실행할 수 있으며 스마트 계약을 초기화하는 데 필요한 작업을 상당히 줄일 수 있습니다.
주:
다음 단계 중 하나를 실행하기 전에 스마트 계약 방법에 대한 접근 권한이 부여된 사용자에 대한 REST 프록시로 enrollmentIDs를 생성해야 합니다. 등록은 REST API를 호출하는 사용자 이름과 REST 프록시 노드에서 등록 생성 항목에 설명된 대로 토큰이 지정될 블록체인에 의해 내부적으로 관리되는 계정 간의 매핑입니다.다음 Postman 모음을 사용하여 스마트 계약을 쉽게 초기화할 수 있습니다. Postman 모음 다운로드
이 Postman 모음의 AdminSteps 폴더에는 스마트 계약 초기화를 위해 실행할 세 가지 요청 호출이 있습니다.
Postman 컬렉션을 사용할 준비가 되었지만 사용자 환경에 맞게 구성해야 하는 변수 집합(암호, URL 등)이 있습니다. 이러한 변수는 Postman 컬렉션의 변수 탭에서 설정됩니다. 다음 표에서는 정의한 모든 변수를 보여 주며 사용자 환경에 맞게 조정해야 합니다.
변수 이름 | 변수 값 |
---|---|
bc_founder_provider_url | https://org1-w.... |
bc_timeout | 60000 |
bc_nft_founder_userid1 | cmsleg001 |
bc_nft_founder_userid1_pwd | 비밀번호 |
bc_nft_founder_userid2 | cmsfin001 |
bc_nft_founder_userid2_pwd | 비밀번호 |
bc_nft_founder_userid3 | cmsrsk001 |
bc_nft_founder_userid4_pwd | 비밀번호 |
bc_channel_name | 쐐기풀 |
bc_chaincode_name | WEDOCMS |
블록체인 서비스 콘솔에서 REST API에 접근할 수 있는 엔드포인트를 찾습니다.
- 스마트 계약 초기화(관리 사용자 계정 시작).
- NFT 토큰을 소유할 수 있는 사용자를 위한 지갑을 생성합니다.
- 해당 권한을 가져야 하는 유저에 대해 최소 롤을 지정합니다.
AdminSteps
폴더로의 호출에 해당합니다.
- 관리 작업을 실행할 수 있는 사용자 계정을 나타내는 체인 코드(Step-0: Init Admin User Account)를 초기화합니다.
init
메소드의 인수를 올바르게 설정해야 합니다(args: Scaped array of user_ids with their org_ids
).{ "chaincode": "{{bc_nft_chaincode_name}}", "args": [ "init", "[{\"orgId\":\"org1\",\"userId\":\"cmsleg001\"},{\"orgId\":\"org1\",\"userId\":\"cmsfin001\"},{\"orgId\":\"org1\",\"userId\":\"cmsrsk001\"}]" ], "timeout": {{bc_timeout}}, "isInit": true, "sync": true }
- 물리적 자산을 나타내는 NFT 자산의 관리인이 될 수 있는 모든 사용자에 대한 사용자 계정을 만듭니다. 이 작업은 Step-1: Create account Postman 요청을 실행하여 수행할 수 있습니다. 사용 사례의 세부 사항에는 네트워크에 속한 동일한 단일 조직과 관련된 세 명의 사용자만 있습니다. 이 호출은 계정을 만들 사용자 수만큼 실행해야 합니다. 이 경우 세 번씩 다음 매개변수를 사용합니다.
"createAccount", "org1", "cmsleg001", "nonfungible"
"createAccount", "org1", "cmsfin001", "nonfungible"
"createAccount", "org1", "cmsrsk001", "nonfungible"
{ "chaincode": "{{bc_nft_chaincode_name}}", //Smartcontract name "args": [ "createAccount", "org1","cmsleg001","nonfungible" //Method, OrgID, UserID, fungible for FT / nonfungible for NFT ], "timeout": 60000, "sync": true }
- 토큰을 민트할 수 있는 사용자를 설정합니다. 이 경우 토큰 민트는 새 문서 세트를 보유할 새 폴더를 생성하므로 세 명의 기존 사용자(cmsleg001, cmsfin001 또는 cmsrsk001) 중 이러한 작업을 실행할 수 있는 사용자를 결정할 수 있으며, 해당 사용자에 대해 Postman 모음의 Step-2: AddRole 요청을 실행할 수 있습니다.
{ "chaincode": "{{bc_nft_chaincode_name}}", //Smartcontract name "args": [ "addRole", //Method name "minter","org1","cmsleg001" //Role, OrgId, UserID ], "timeout": 60000, "sync": true }