Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(satp-hermes): satp development continuation #3397

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/cactus-plugin-satp-hermes/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,13 @@
"@hyperledger/cactus-common": "2.0.0-rc.2",
"@hyperledger/cactus-core": "2.0.0-rc.2",
"@hyperledger/cactus-core-api": "2.0.0-rc.2",
"@hyperledger/cactus-plugin-bungee-hermes": "2.0.0-rc.1",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please bump version to latest

"@hyperledger/cactus-plugin-keychain-memory": "2.0.0-rc.2",
"@hyperledger/cactus-plugin-ledger-connector-besu": "2.0.0-rc.2",
"@hyperledger/cactus-plugin-ledger-connector-fabric": "2.0.0-rc.2",
"@hyperledger/cactus-plugin-object-store-ipfs": "2.0.0-rc.2",
"@hyperledger/cactus-test-tooling": "2.0.0-rc.2",
"@openzeppelin/contracts": "4.4.0",
"axios": "1.6.0",
"body-parser": "1.20.2",
"class-transformer": "0.5.1",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ message TransferClaims {
string receiver_gateway_owner_id = 12;
uint32 max_retries = 13;
uint64 max_timeout = 14;
string amount_from_originator = 15;
string amount_to_beneficiary = 16;
}

message TransferClaimsFormat {
Expand Down Expand Up @@ -192,35 +194,40 @@ enum Error {
ERROR_MESSAGE_OUT_OF_SEQUENCE = 11;
}

message LockAssertionClaim {

}

message LockAssertionFormat {
message LockAssertionClaimFormat {

}

message MintAssertionClaims {
message MintAssertionClaimFormat {

}

message MintAssertionClaimsFormat {
message BurnAssertionClaimFormat {

}

message BurnAssertionClaim {
message AssignmentAssertionClaimFormat {

}

message BurnAssertionClaimFormat {

message LockAssertionClaim {
string receipt = 1;
string signature = 2;
}

message AssignmentAssertionClaim {

message MintAssertionClaim {
string receipt = 1;
string signature = 2;
}

message AssignmentAssertionClaimFormat {
message BurnAssertionClaim {
string receipt = 1;
string signature = 2;
}

message AssignmentAssertionClaim {
string receipt = 1;
string signature = 2;
}

Original file line number Diff line number Diff line change
Expand Up @@ -37,36 +37,40 @@ message SessionData {
string sender_gateway_owner_id = 27;
string receiver_gateway_owner_id = 28;
string hash_transfer_init_claims = 29;
string proposed_transfer_init_claims = 30;
cacti.satp.v02.common.SignatureAlgorithm signature_algorithm = 31;
cacti.satp.v02.common.LockType lock_type = 32;
uint64 lock_expiration_time = 33;
cacti.satp.v02.common.Permissions permissions = 34;
string developer_urn = 35;
cacti.satp.v02.common.CredentialProfile credential_profile = 36;
cacti.satp.v02.common.SubsequentCalls subsequent_calls = 37;
repeated cacti.satp.v02.common.History history = 38;
bool multiple_claims_allowed = 39;
bool multiple_cancels_allowed = 40;
string last_message_received_timestamp = 41;
MessageStagesTimestamps processed_timestamps = 42;
MessageStagesTimestamps received_timestamps = 43;
cacti.satp.v02.common.LockAssertionClaim lock_assertion_claim = 44;
cacti.satp.v02.common.LockAssertionFormat lock_assertion_format = 45;
cacti.satp.v02.common.MintAssertionClaims mint_assertion_claims = 46;
cacti.satp.v02.common.MintAssertionClaimsFormat mint_assertion_claims_format = 47;
cacti.satp.v02.common.BurnAssertionClaim burn_assertion_claim = 48;
cacti.satp.v02.common.BurnAssertionClaimFormat burn_assertion_claim_format = 49;
cacti.satp.v02.common.AssignmentAssertionClaim assignment_assertion_claim = 50;
cacti.satp.v02.common.AssignmentAssertionClaimFormat assignment_assertion_claim_format = 51;
bool completed = 52;
ACCEPTANCE acceptance = 53;
string last_message_hash = 54;
cacti.satp.v02.common.TransferClaimsFormat transfer_claims_format = 55;
cacti.satp.v02.common.TransferClaims transfer_init_claims = 30;
string proposed_transfer_init_claims = 31;
cacti.satp.v02.common.SignatureAlgorithm signature_algorithm = 32;
cacti.satp.v02.common.LockType lock_type = 33;
uint64 lock_expiration_time = 34;
cacti.satp.v02.common.Permissions permissions = 35;
string developer_urn = 36;
cacti.satp.v02.common.CredentialProfile credential_profile = 37;
cacti.satp.v02.common.SubsequentCalls subsequent_calls = 38;
repeated cacti.satp.v02.common.History history = 39;
bool multiple_claims_allowed = 40;
bool multiple_cancels_allowed = 41;
string last_message_received_timestamp = 42;
MessageStagesTimestamps processed_timestamps = 43;
MessageStagesTimestamps received_timestamps = 44;
cacti.satp.v02.common.LockAssertionClaim lock_assertion_claim = 45;
cacti.satp.v02.common.LockAssertionClaimFormat lock_assertion_claim_format = 46;
cacti.satp.v02.common.MintAssertionClaim mint_assertion_claim = 47;
cacti.satp.v02.common.MintAssertionClaimFormat mint_assertion_claim_format = 48;
cacti.satp.v02.common.BurnAssertionClaim burn_assertion_claim = 49;
cacti.satp.v02.common.BurnAssertionClaimFormat burn_assertion_claim_format = 50;
cacti.satp.v02.common.AssignmentAssertionClaim assignment_assertion_claim = 51;
cacti.satp.v02.common.AssignmentAssertionClaimFormat assignment_assertion_claim_format = 52;
bool completed = 53;
ACCEPTANCE acceptance = 54;
string last_message_hash = 55;
cacti.satp.v02.common.TransferClaimsFormat transfer_claims_format = 56;
string client_transfer_number = 57;
string server_transfer_number = 58;
string lock_assertion_expiration = 59;
cacti.satp.v02.common.AssetProfile asset_profile = 60;
}



message MessageStagesHashes {
Stage1Hashes stage1 = 1;
Stage2Hashes stage2 = 2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ message TransferCommenceRequestMessage {

message TransferCommenceResponseMessage {
cacti.satp.v02.common.CommonSatp common = 1;
string server_transfer_number = 2;
}

service SatpStage1Service {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import "cacti/satp/v02/common/message.proto";
message LockAssertionRequestMessage {
cacti.satp.v02.common.CommonSatp common = 1;
cacti.satp.v02.common.LockAssertionClaim lock_assertion_claim = 2;
cacti.satp.v02.common.LockAssertionFormat lock_assertion_format = 3;
cacti.satp.v02.common.LockAssertionClaimFormat lock_assertion_claim_format = 3;
string lock_assertion_expiration = 4;
string client_transfer_number = 5;
string client_signature = 6;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ message CommitPreparationRequestMessage {

message CommitReadyResponseMessage {
cacti.satp.v02.common.CommonSatp common = 1;
cacti.satp.v02.common.MintAssertionClaims mint_assertion_claims = 2;
cacti.satp.v02.common.MintAssertionClaimsFormat mint_assertion_claims_format = 3;
cacti.satp.v02.common.MintAssertionClaim mint_assertion_claim = 2;
cacti.satp.v02.common.MintAssertionClaimFormat mint_assertion_claim_format = 3;
string server_transfer_number = 4;
string server_signature = 5;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@ import {
import { ExecuteGetStatus } from "./admin/get-status-handler-service";
import { ISATPManagerOptions, SATPManager } from "../gol/satp-manager";
import { GatewayOrchestrator } from "../gol/gateway-orchestrator";
import { SATPBridgesManager } from "../gol/satp-bridges-manager";

export interface BLODispatcherOptions {
logger: Logger;
logLevel?: LogLevelDesc;
instanceId: string;
orchestrator: GatewayOrchestrator;
signer: JsObjectSigner;
bridgesManager: SATPBridgesManager;
}

export class BLODispatcher {
Expand All @@ -36,6 +38,7 @@ export class BLODispatcher {
private readonly instanceId: string;
private manager: SATPManager;
private orchestrator: GatewayOrchestrator;
private bridgeManager: SATPBridgesManager;

constructor(public readonly options: BLODispatcherOptions) {
const fnTag = `${BLODispatcher.CLASS_NAME}#constructor()`;
Expand All @@ -50,11 +53,14 @@ export class BLODispatcher {
const signer = options.signer;
const ourGateway = this.orchestrator.ourGateway;

this.bridgeManager = options.bridgesManager;

const SATPManagerOpts: ISATPManagerOptions = {
logLevel: "DEBUG",
instanceId: ourGateway!.id,
signer: signer,
supportedDLTs: this.orchestrator.supportedDLTs,
bridgeManager: this.bridgeManager,
};

this.manager = new SATPManager(SATPManagerOpts);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
import { createPromiseClient } from "@connectrpc/connect";
import {
LogLevelDesc,
Logger,
LoggerProvider,
} from "@hyperledger/cactus-common";
import { SatpStage1Service } from "../generated/proto/cacti/satp/v02/stage_1_connect";
import { createConnectTransport } from "@connectrpc/connect-node";
import { SatpStage2Service } from "../generated/proto/cacti/satp/v02/stage_2_connect";
import { SatpStage3Service } from "../generated/proto/cacti/satp/v02/stage_3_connect";
import { SATPManager } from "../gol/satp-manager";
import { SATPSession } from "./satp-session";
import { SATPHandler } from "../types/satp-protocol";
import { Stage1SATPHandler } from "./stage-handlers/stage1-handler";
import { Stage2SATPHandler } from "./stage-handlers/stage2-handler";
import { Stage3SATPHandler } from "./stage-handlers/stage3-handler";

export interface ISenderSATPProtocolOptions {
logLevel?: LogLevelDesc;
serverPath: string;
sessionId: string;
satpManager: SATPManager;
}

export interface SATPTransferRequest {
sessionId: string;
}

export class SenderSATPProtocol {
public static readonly CLASS_NAME = "SenderSATPProtocol";

private satpManager: SATPManager;

readonly log: Logger;
constructor(private config: ISenderSATPProtocolOptions) {
this.log = LoggerProvider.getOrCreate({
label: SenderSATPProtocol.CLASS_NAME,
level: config.logLevel || "INFO",
});
this.satpManager = config.satpManager;
}

public async initiateTransfer(session: SATPSession): Promise<void> {
this.log.info(`Initiating Transfer`);
this.log.info(`Session: ${JSON.stringify(session)}`);

if (!session) {
throw new Error(`Session with id ${this.config.sessionId} not found`);
}

const transport = createConnectTransport({
baseUrl: this.config.serverPath,
httpVersion: "1.1",
});

const handlers = this.satpManager.getSATPHandlers(
session.getSessionData().id,
);

if (!handlers) {
throw new Error(
`No handlers found for session ${session.getSessionData().id}`,
);
}

const satpHandlers: Map<string, SATPHandler> = handlers;

const clientSatpStage1 = createPromiseClient(SatpStage1Service, transport);
const clientSatpStage2 = createPromiseClient(SatpStage2Service, transport);
const clientSatpStage3 = createPromiseClient(SatpStage3Service, transport);

const requestTransferProposal = await (
satpHandlers.get("Stage1SATPHandler") as Stage1SATPHandler
).TransferProposalRequest();

if (!requestTransferProposal) {
throw new Error(`Failed to create TransferProposalRequest`);
}

const responseTransferProposal = await clientSatpStage1.transferProposal(
requestTransferProposal,
);

this.log.info(
`responseTransferProposal: ${JSON.stringify(responseTransferProposal)}`,
);

const requestTransferCommence = await (
satpHandlers.get("Stage1SATPHandler") as Stage1SATPHandler
).TransferCommenceRequest(responseTransferProposal);

if (!requestTransferCommence) {
throw new Error(`Failed to create TransferCommenceRequest`);
}

const responseTransferCommence = await clientSatpStage1.transferCommence(
requestTransferCommence,
);

this.log.info(
`responseTransferCommence: ${JSON.stringify(responseTransferCommence)}`,
);

this.log.info(`Stage 1 completed`);

const requestLockAssertion = await (
satpHandlers.get("Stage2SATPHandler") as Stage2SATPHandler
).LockAssertionRequest(responseTransferCommence);

if (!requestLockAssertion) {
throw new Error(`Failed to create LockAssertionRequest`);
}

const responseLockAssertion =
await clientSatpStage2.lockAssertion(requestLockAssertion);

this.log.info(
`responseLockAssertion: ${JSON.stringify(responseLockAssertion)}`,
);

this.log.info(`Stage 2 completed`);

const requestCommitPreparation = await (
satpHandlers.get("Stage3SATPHandler") as Stage3SATPHandler
).CommitPreparationRequest(responseLockAssertion);

if (!requestCommitPreparation) {
throw new Error(`Failed to create CommitPreparationRequest`);
}

const responseCommitPreparation = await clientSatpStage3.commitPreparation(
requestCommitPreparation,
);
this.log.info(
`responseCommitPreparation: ${JSON.stringify(responseCommitPreparation)}`,
);

const requestCommitFinalAssertion = await (
satpHandlers.get("Stage3SATPHandler") as Stage3SATPHandler
).CommitFinalAssertionRequest(responseLockAssertion);

if (!requestCommitFinalAssertion) {
throw new Error(`Failed to create CommitFinalAssertionRequest`);
}

const responseCommitFinalAssertion =
await clientSatpStage3.commitFinalAssertion(requestCommitFinalAssertion);
this.log.info(
`responseCommitFinalAssertion: ${JSON.stringify(responseCommitFinalAssertion)}`,
);

const RequestTransferComplete = await (
satpHandlers.get("Stage3SATPHandler") as Stage3SATPHandler
).TransferCompleteRequest(responseCommitFinalAssertion);

if (!RequestTransferComplete) {
throw new Error(`Failed to create TransferCompleteRequest`);
}

const responseTransferComplete = await clientSatpStage3.transferComplete(
RequestTransferComplete,
);
this.log.info(
`responseTransferComplete: ${JSON.stringify(responseTransferComplete)}`,
);

this.log.info(`Stage 3 completed`);
}
}
Loading
Loading