* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.
상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : )
https://hyperledger.github.io/composer/latest/tutorials/invoke-composer-network
하이퍼레저 컴포저에는 비즈니스 네트워크에서 다른 비즈니스 네트워크게 기록된 자산, 참가자 혹은 트랜잭션에 액세스할 수 있는 기능이 포함되어 있습니다.
이 튜토리얼은 다른 비즈니스 네트워크에서 하이퍼레저 컴포터 비즈니스 네트워크를 호출하기 위해 비즈니스 네트워크 개발자가 수행해야하는 단계를 보여줍니다. 이 튜토리얼에서는 동일한 비즈니스 네트워크를 두 번 배포합니다. 여기서 두 개의 비즈니스 네트워크는 동일한 채널에 있지만, 서로 다른 채널에 있을 수도 있습니다. 현재 튜토리얼에서 사용하는 비즈니스 네트워크는 developer tutorial에 있는 tutorial network입니다. 여기서 사용할 두 개의 비즈니스 네트워크는 각각 A와 B라고 부릅니다.
Prerequisites
시작하기 전, 아래 링크를 따라 개발환경설치가 완료되었는지 확인해주세요.
https://ralee-world.tistory.com/entry/Hyperledger-Composer-Installing?category=719808
Step One: Starting a Hyperledger Fabric network
이 튜토리얼을 따라하려면 하이퍼레저 패브릭 네트워크를 시작해야 합니다. 개발 환경에서 제공하는 간단한 하이퍼레저 패브릭 네트워크를 사용해도 좋고, 하이퍼레저 패브릭 docs를 따라 만든 네트워크를 사용해도 좋습니다.
이 튜토리얼에서는 개발환경에서 제공하는 기본 하이퍼레저 패브릭 네트워크를 사용한다고 가정합니다. 스스로 만든 하이퍼레저 패브릭 네트워크를 사용할 경우 아래 구성 및 설정을 매핑시켜줘야 합니다.
1. 아래 커맨드를 사용해 하이퍼레저 패브릭 clean을 시작하세요.
cd ~/fabric-dev-servers
export FABRIC_VERSION=hlfv12
./stopFabric.sh
./teardownFabric.sh
./downloadFabric.sh
./startFabric.sh
2. 지갑에 있을 수 있는 비즈니스 네트워크 카드를 삭제하세요. 비즈니스 네트워크 카드가 존재하지 않는다는 경고는 무시해도 좋습니다.
composer card delete -c PeerAdmin@hlfv1
위 커맨드가 실패하면 이전 버전의 비즈니스 네트워크 카드가 존재할 수도 있으므로 파일 시스템 내 카드 저장소를 삭제해주세요.
rm -fr ~/.composer
1. 아래 커맨드를 사용해 PeerAdmin 카드를 생성하세요.
./createPeerAdminCard.sh
Step Two: Define the business networks
1. developer tutorial에 있는 step 1, 2를 따라하세요. 이는 네트워크 A가 될 것입니다.
https://ralee-world.tistory.com/entry/Developer-Tutorial?category=719808
2. developer tutorial 내 step 1, 2를 한 번 더 반복하되, 비즈니스 네트워크 이름을 other-tutorial-network라고 지으세요. 이 네트워크는 B가 될 것입니다.
3. 네트워크 A의 트랜잭션 로직은 업데이트되어야 합니다. 이는 비즈니스 네트워크 B에 있는 자산에 쿼리하고 A 자산의 quantity 속성을 업데이트 할 것입니다.
logic.js 스크립트 파일의 트랜잭션 처리 함수를 아래와 같이 수정하세요.
/**
* Track the trade of a commodity from one trader to another
* @param {org.example.mynetwork.Trade} trade - the trade to be processed
* @transaction
*/
async function tradeCommodity(trade) {
trade.commodity.owner = trade.newOwner;
const otherNetworkData = await getNativeAPI().invokeChaincode('other-tutorial-network', ['getResourceInRegistry', 'Asset', 'org.example.mynetwork.Commodity', trade.commodity.tradingSymbol], 'composerchannel');
const stringAsset = new Buffer(otherNetworkData.payload.toArrayBuffer()).toString('utf8');
const asset = getSerializer().fromJSON(JSON.parse(stringAsset));
trade.commodity.quantity = asset.quantity;
const assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');
await assetRegistry.update(trade.commodity);
}
4. developer tutorial 내 step 3를 따라하세요.
Step Three: Deploy the business networks
1. 아래 커맨드를 사용해 비즈니스 네트워크 A를 설치하고 시작하세요.
composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna
composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkA.card
composer card import --file networkA.card --card networkA
2. 아래 커맨드를 사용해 비즈니스 네트워크 B를 설치하고 시작하세요.
composer network install --card PeerAdmin@hlfv1 --archiveFile other-tutorial-network@0.0.1.bna
composer network start --networkName other-tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkB.card
composer card import --file networkB.card --card networkB
3. 비즈니스 네트워크가 성공적으로 배포되었는지 확인하기 위해 아래 커맨드를 사용해 ping을 날려보세요.
composer network ping --card networkA
composer network ping --card networkB
Step Four: Create the assets
1. 아래 커맨드를 사용해 비즈니스 네트워크 A에 참가자를 생성하세요.
composer participant add --card networkA -d '{"$class": "org.example.mynetwork.Trader", "tradeId": "bob@example.com", "firstName": "Bob", "lastName": "Jones"}'
2. 비즈니스 네트워크 A에 자산을 생성하세요.
composer transaction submit --card networkA -d '{"$class": "org.hyperledger.composer.system.AddAsset", "targetRegistry" : "resource:org.hyperledger.composer.system.AssetRegistry#org.example.mynetwork.Commodity", "resources": [{"$class": "org.example.mynetwork.Commodity","tradingSymbol": "Ag","owner": "resource:org.example.mynetwork.Trader#bob@example.com","description": "a lot of gold", "mainExchange": "exchange", "quantity" : 250}]}'
3. 아래 커맨드를 사용해 비즈니스 네트워크 B에 참가자를 생성하세요.
composer participant add --card networkB -d '{"$class": "org.example.mynetwork.Trader", "tradeId": "fred@example.com", "firstName": "Fred", "lastName": "Bloggs"}'
4. 비즈니스 네트워크 B에 자산을 생성하세요. A와 quantity 속성이 다름에 주의하세요.
composer transaction submit --card networkB -d '{"$class": "org.hyperledger.composer.system.AddAsset", "targetRegistry" : "resource:org.hyperledger.composer.system.AssetRegistry#org.example.mynetwork.Commodity", "resources": [{"$class": "org.example.mynetwork.Commodity","tradingSymbol": "Ag","owner": "resource:org.example.mynetwork.Trader#fred@example.com","description": "a lot of gold", "mainExchange": "exchange", "quantity" : 500}]}'
Step Five: Bind the identity on network A to the participant on network B
1. 자격증명을 얻기 위해 네트워크 A 카드를 export 하세요.
composer card export -c networkA
2. 카드의 압축을 풀고 networkA.card를 networkA.zip으로 이름을 변경하세요.
3. 아래 커맨드를 사용해 참가자의 신원을 바인딩하세요.
composer identity bind --card networkB --participantId resource:org.hyperledger.composer.system.NetworkAdmin#admin --certificateFile ./networkA/credentials/certificate
4. 바인딩한 신원으로 카드를 생성하세요.
composer card create -p ~/.composer/cards/networkB/connection.json --businessNetworkName other-tutorial-network -u admin -c ./networkA/credentials/certificate -k ./networkA/credentials/privateKey -f newNetworkB.card
5. 카드를 import 하세요.
composer card import --file newNetworkB.card --card newNetworkB
6. 신원을 활성화시키기 위해 네트워크에 ping을 날리세요.
composer network ping --card newNetworkB
Step Six: Review the asset data
자산을 보고 quantity가 250임을 확인합니다.
composer network list --card networkA -r org.example.mynetwork.Commodity -a Ag
Step Seven: Submit a transaction
다른 비즈니스 네트워크의 자산에 쿼리한 결과를 보기 위해 트랜잭션을 제출합니다. 네트워크B는 쿼리를 받을 뿐 quantity는 변화되지 않음에 주의하세요.
composer transaction submit --card networkA -d '{"$class": "org.example.mynetwork.Trade", "commodity": "resource:org.example.mynetwork.Commodity#Ag", "newOwner": "resource:org.example.mynetwork.Trader#bobId"}'
Step Eight: Check the updated asset
업데이트된 자산을 보고 quantity가 500이 되었음을 확인합니다.
composer network list --card networkA -r org.example.mynetwork.Commodity -a Ag