Gerüstete TypeScript NFT Projekt für ERC-721

Blockchain App Builder übernimmt die Eingabe aus Ihrer NFT-Spezifikationsdatei und generiert ein voll funktionsfähiges Gerüstkettencode-Projekt.

Das Projekt generiert automatisch NFT-Lebenszyklusklassen und -Funktionen, einschließlich CRUD- und Nicht-CRUD-Methoden, sowie ein Tokenisierungs-SDK. Die Validierung von Argumenten, das Marshalling/Unmarshalling und die transparente Persistenzfunktion werden automatisch unterstützt.

Informationen zum Gerüstprojekt und zu Methoden, die nicht direkt mit NFTs in Verbindung stehen, finden Sie unter Scaffolded TypeScript Chaincode Project.

Modell

Jede tokenisierte Modellklasse erweitert die Klasse OchainModel. Transparente Persistenzfähigkeit oder vereinfachtes ORM wird in der Klasse OchainModel erfasst.

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('ART')
    public symbol: string;

    @ReadOnly('erc721+')
    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;

    @Validate(yup.string().max(2000))
    public tokenUri: string;
    
    @Embedded(ArtCollectionMetadata)
    public metadata: ArtCollectionMetadata;

    @Validate(yup.number())
    public price: number;

    @Validate(yup.boolean())
    public on_sale_flag: boolean;

}

Controller

Die Hauptcontrollerklasse erweitert die Klasse OchainController. Es gibt nur einen Hauptcontroller.

export class DigiCurrCCController extends OchainController{

Sie können eine beliebige Anzahl von Klassen, Funktionen oder Dateien erstellen, aber nur die Methoden, die in der Hauptcontrollerklasse definiert sind, können nicht verwendet werden. Die anderen Methoden sind verborgen.

Mit den Token-SDK-Methoden können Sie benutzerdefinierte Methoden für Ihre Geschäftsanwendung schreiben.

Automatisch generierte NFT-Methoden

Blockchain App Builder generiert automatisch Methoden zur Unterstützung von NFTs und NFT-Lebenszyklen. Mit diesen Methoden können Sie NFTs initialisieren, Rollen und Accounts verwalten und andere NFT-Lebenszyklusaufgaben ohne zusätzliche Codierung abschließen. Controller-Methoden müssen einen @Validator(...params)-Dekorator aufweisen, damit sie aufgerufen werden können.

Methoden für Access Control Management

addTokenAdmin
Mit dieser Methode wird ein Benutzer als Token Admin des Chaincodes hinzugefügt. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@Validator(yup.string(), yup.string())
public async addTokenAdmin(orgId: string, userId: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ADMIN.addAdmin', 'TOKEN');
    return await this.Ctx.ERC721Admin.addAdmin(orgId, userId);
}
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg eine Meldung, die Details des Benutzers enthält, der als Token Admin des Chaincodes hinzugefügt wurde.
Beispiel für den Rückgabewert:
{"msg":"Successfully added Admin (orgId: Org1MSP, userId: User1)"}
removeTokenAdmin
Mit dieser Methode wird ein Benutzer als Token Admin des Chaincodes entfernt. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@Validator(yup.string(), yup.string())
public async removeTokenAdmin(orgId: string, userId: string) {
   await this.Ctx.ERC721Auth.checkAuthorization('ERC721ADMIN.removeAdmin', 'TOKEN');
   return await this.Ctx.ERC721Admin.removeAdmin(orgId, userId);
}
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg eine Meldung, die Details des Benutzers enthält, der als Token Admin des Chaincodes entfernt wurde.
Beispiel für den Rückgabewert:
{"msg": "Successfully removed Admin (orgId: Org1MSP, userId: User1)"}
isTokenAdmin
Diese Methode gibt den booleschen Wert true zurück, wenn der Aufrufer der Funktion ein Token Admin ist. Andernfalls wird false zurückgegeben. Eine Token Admin kann diese Funktion für jeden anderen Benutzer im Blockchain-Netzwerk aufrufen. Andere Benutzer können diese Methode nur auf ihren eigenen Konten aufrufen.
@GetMethod()
@Validator(yup.string(), yup.string())
public async isTokenAdmin(orgId: string, userId: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ADMIN.isUserTokenAdmin', 'TOKEN');
    return await this.Ctx.ERC721Auth.isUserTokenAdmin(orgId, userId);
}
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Die Methode gibt true zurück, wenn der Aufrufer ein Token Admin ist. Andernfalls wird false zurückgegeben.
Beispiel für den Rückgabewert:
{"result": true}
getAllTokenAdmins
Diese Methode gibt eine Liste aller Benutzer zurück, die ein Token Admin des Chaincodes sind. Diese Methode kann nur vom Token Admin des Chaincodes aufgerufen werden.
@GetMethod()
@Validator()
public async getAllTokenAdmins() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ADMIN.getAllAdmins', 'TOKEN');
    return await this.Ctx.ERC721Admin.getAllAdmins();
}
Parameter:
  • Kein
Rückgabewert:
  • Bei Erfolg ein admins-Array im JSON-Format, das die Objekte orgId und userId enthält.
Beispiel für den Rückgabewert:
{"admins":[{"orgId":"Org1MSP","userId":"admin"}]}

Methoden für die Tokenkonfigurationsverwaltung

init
Diese Methode wird aufgerufen, wenn der Chaincode instanziiert wird. Alle Token Admin werden durch die Informationen userId und orgId im Parameter adminList identifiziert. userId ist der Benutzername oder die E-Mail-ID des Instanzeigentümers oder des bei der Instanz angemeldeten Benutzers. Die orgId ist die Membership Service Provider-(MSP-)ID des Benutzers in der aktuellen Netzwerkorganisation. Der Parameter adminList ist beim ersten Deployment des Chaincodes obligatorisch. Wenn Sie den Chaincode upgraden, übergeben Sie eine leere Liste ([]). Alle anderen Informationen im Parameter adminList werden bei Upgrades ignoriert.
@Validator(yup.array().of(yup.object()).nullable())
public async init(adminList: ERC721TokenAdminAsset[]) {
   await this.Ctx.ERC721Admin.initAdmin(adminList);
   await this.Ctx.ERC721Token.saveClassInfo(<NFT_NAME>);
   await this.Ctx.ERC721Token.saveDeleteTransactionInfo();
   return;
}
Parameter:
  • adminList array: Ein Array mit {orgId, userId}-Informationen, das die Liste der Tokenadministratoren angibt. Das Array adminList ist ein obligatorischer Parameter.
getAllTokens
Diese Methode gibt alle Tokenassets zurück, die in der Statusdatenbank gespeichert sind. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden. Diese Methode verwendet SQL-reiche Berkeley DB-Abfragen und kann nur aufgerufen werden, wenn eine Verbindung mit dem Remote-Netzwerk von Oracle Blockchain Platform hergestellt wird.
@GetMethod()
@Validator()
public async getAllTokens() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.getAllTokens', 'TOKEN');
    return await this.Ctx.ERC721Token.getAllTokens();
}
Parameter:
  • Kein
Rückgabewert:
  • Eine Liste aller Tokenassets im JSON-Format.
Beispiel für den Rückgabewert:
[
    {
        "key": "monalisa",
        "valueJson": {
            "metadata": {
                "PaintingName": "Mona_Lisa",
                "Description": "Mona Lisa Painting",
                "Image": "monalisa.jpeg",
                "PainterName": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "ravinft",
            "tokenDesc": "token Description",
            "symbol": "PNT",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "createdBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "creationDate": "2022-04-07T21:17:48.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "NftBasePrice": 100
        }
    },
    {
        "key": "monalisa1",
        "valueJson": {
            "metadata": {
                "PaintingName": "Mona_Lisa",
                "Description": "Mona Lisa Painting",
                "Image": "monalisa.jpeg",
                "PainterName": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa1",
            "tokenName": "ravinft",
            "tokenDesc": "token Description",
            "symbol": "PNT",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "createdBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "creationDate": "2022-04-07T21:17:59.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "NftBasePrice": 100
        }
    }
]
getAllTokensByUser
Diese Methode gibt alle Tokenassets zurück, deren Eigentümer ein angegebener Benutzer ist. Diese Methode verwendet SQL-reiche Berkeley DB-Abfragen und kann nur aufgerufen werden, wenn eine Verbindung mit dem Remote-Netzwerk von Oracle Blockchain Platform hergestellt wird. Diese Methode kann nur von einem Token Admin des Chaincodes oder vom Accounteigentümer aufgerufen werden.
@GetMethod()
@Validator(yup.string(), yup.string())
public async getAllTokensByUser(orgId: string, userId: string) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.getAllTokensByUser', 'TOKEN', { accountId });
    return await this.Ctx.ERC721Token.getAllTokensByUser(accountId);
}
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Eine Liste der Tokenassets im JSON-Format.
Beispiel für den Rückgabewert:
[
    {
        "key": "monalisa",
        "valueJson": {
            "metadata": {
                "PaintingName": "Mona_Lisa",
                "Description": "Mona Lisa Painting",
                "Image": "monalisa.jpeg",
                "PainterName": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "ravinft",
            "tokenDesc": "token Description",
            "symbol": "PNT",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "createdBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "creationDate": "2022-04-07T21:17:48.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "NftBasePrice": 100
        }
    },
    {
        "key": "monalisa1",
        "valueJson": {
            "metadata": {
                "PaintingName": "Mona_Lisa",
                "Description": "Mona Lisa Painting",
                "Image": "monalisa.jpeg",
                "PainterName": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa1",
            "tokenName": "ravinft",
            "tokenDesc": "token Description",
            "symbol": "PNT",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "createdBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "creationDate": "2022-04-07T21:17:59.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "NftBasePrice": 100
        }
    }
]
getTokenById
Diese Methode gibt ein Tokenobjekt zurück, wenn das Token in der Statusdatenbank vorhanden ist. Diese Methode kann nur von einem Token Admin des Chaincodes oder des Tokeneigentümers aufgerufen werden.
@GetMethod()
@Validator(yup.string())
public async getTokenById(tokenId: string) {
   await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.get', 'TOKEN', { tokenId });
   let token = await this.getTokenObject(tokenId);
   return token;
}
Parameter:
  • tokenId: string: Die ID des abzurufenden Tokens.
Rückgabewert:
  • Das Tokenasset im JSON-Format.
Beispiel für den Rückgabewert:
{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "transferredBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "transferredDate": "2022-04-05T09:28:30.000Z",
    "isBurned": false,
    "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
    "price": 100,
    "on_sale_flag": true
}
getTokenHistory
Diese Methode gibt die Historie für eine angegebene Token-ID zurück. Dies ist eine asynchrone Methode. Diese Methode kann nur aufgerufen werden, wenn sie mit dem Remote-Netzwerk von Oracle Blockchain Platform verbunden ist. Jeder kann diese Methode nennen.
@GetMethod()
@Validator(yup.string())
public async getTokenHistory(tokenId: string) {
   // await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.history', 'TOKEN');
   return await this.Ctx.ERC721Token.history(tokenId);
}
Parameter:
  • tokenId: string: Die ID des Tokens.
Beispiel für den Rückgabewert:
[
    {
        "trxId": "ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timeStamp": 1649150910,
        "value": {
            "metadata": {
                "painting_name": "Mona_Lisa",
                "description": "Mona Lisa Painting",
                "image": "monalisa.jpeg",
                "painter_name": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "artcollection",
            "tokenDesc": "token description",
            "symbol": "ART",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "transferredBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2022-04-05T08:30:42.000Z",
            "transferredDate": "2022-04-05T09:28:30.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "price": 100,
            "on_sale_flag": true
        }
    },
    {
        "trxId": "cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timeStamp": 1649149545,
        "value": {
            "metadata": {
                "painting_name": "Mona_Lisa",
                "description": "Mona Lisa Painting",
                "image": "monalisa.jpeg",
                "painter_name": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "artcollection",
            "tokenDesc": "token description",
            "symbol": "ART",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "transferredBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2022-04-05T08:30:42.000Z",
            "transferredDate": "2022-04-05T09:05:45.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "price": 100,
            "on_sale_flag": true
        }
    },
    {
        "trxId": "702e61cc8d6d2982521023d0d5f3195900f35e146d6a90ef66daae551e6075d2",
        "timeStamp": 1649147729,
        "value": {
            "metadata": {
                "painting_name": "Mona_Lisa",
                "description": "Mona Lisa Painting",
                "image": "monalisa.jpeg",
                "painter_name": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "artcollection",
            "tokenDesc": "token description",
            "symbol": "ART",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2022-04-05T08:30:42.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "price": 100,
            "on_sale_flag": true
        }
    },
    {
        "trxId": "e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timeStamp": 1649147442,
        "value": {
            "metadata": {
                "painting_name": "Mona_Lisa",
                "description": "Mona Lisa Painting",
                "image": "monalisa.jpeg",
                "painter_name": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "artcollection",
            "tokenDesc": "token description",
            "symbol": "ART",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2022-04-05T08:30:42.000Z",
            "isBurned": false,
            "tokenUri": "\"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg\"",
            "price": 100,
            "on_sale_flag": false
        }
    }
]
getTokenObject
Dies ist eine Utilitymethode, die eine Instanz des Tokens für eine angegebene Token-ID zurückgibt. Diese Methode wird von vielen automatisch generierten Methoden zum Abrufen von Tokenobjekten verwendet. Sie können diese Methode nach Bedarf von Ihren benutzerdefinierten Methoden aufrufen. Wenn Sie ein tokenisiertes Asset oder eine tokenisierte Klasse erstellen, aktualisieren Sie den Switch Case mit der entsprechenden Token-Klasse, um das richtige Tokenobjekt zurückzugeben. Der Befehl ochain sync in Blockchain App Builder erstellt automatisch einen Switch-Fall, wenn ein tokenisiertes Asset in der Spezifikationsdatei erstellt wird. Diese Methode hat keinen @Validator()-Methodendekorator, was bedeutet, dass diese Methode nicht direkt aufrufbar ist und nur von anderen Methoden aufgerufen werden kann.
public async getTokenObject<T extends OchainModel<any>>(tokenId: string): Promise<T> {
   if (!tokenId) {
        throw Error('TokenID cannot be null/empty.');
    }
    const token = await this.Ctx.ERC721Token.get(tokenId);
    if (token.tokenName && token.assetType && token.assetType === 'otoken') {
        let tokenAsset;
        switch (token.tokenName) {
           case '<NFT_NAME in lowercase>':
               tokenAsset = new <NFT_NAME>(token, false, true);
               return tokenAsset;
           default:
               throw new Error(`No token exists with ID [${tokenId}]`);
        }
    } else {
        throw new Error(`No token exists with ID [${tokenId}]`);
    }
}
Parameter:
  • tokenId: string: Die ID des Tokens.
ownerOf
Diese Methode gibt die Konto-ID des Eigentümers der angegebenen Token-ID zurück. Jeder kann diese Methode nennen.
@GetMethod()
@Validator(yup.string())
public async ownerOf(tokenId: string) {
   return await this.Ctx.ERC721Token.ownerOf(tokenId);
}
Parameter:
  • tokenId: string: Die ID des Tokens.
Rückgabewert:
  • Ein JSON-Objekt der Account-ID des Eigentümers.
Beispiel für den Rückgabewert:
{"owner": "oaccount~d6d22c3167e3c6ab9ee5653e1a008c37c20cc47ebb0229ca0aedfafe64c675b8"}
name
Diese Methode gibt den Namen der Token-Klasse zurück. Jeder kann diese Methode nennen.
@GetMethod()
@Validator()
public async name() {
   return await this.Ctx.ERC721Token.name();
}
Parameter:
  • Kein
Rückgabewert:
  • Ein JSON-Objekt mit dem Tokennamen.
Beispiel für den Rückgabewert:
{"tokenName": "artcollection"}
symbol
Diese Methode gibt das Symbol der Token-Klasse zurück. Jeder kann diese Methode nennen.
@GetMethod()
@Validator()
public async symbol() {
   return await this.Ctx.ERC721Token.symbol();
}
Parameter:
  • Kein
Rückgabewert:
  • Ein JSON-Objekt des Tokensymbols.
Beispiel für den Rückgabewert:
{"symbol": "PNT"}
tokenURI
Diese Methode gibt den URI eines angegebenen Tokens zurück. Jeder kann diese Methode nennen.
@GetMethod()
@Validator(yup.string())
public async tokenURI(tokenId: string) {
   return await this.Ctx.ERC721Token.tokenURI(tokenId);
}
Parameter:
  • tokenId: string: Die ID des Tokens.
Rückgabewert:
  • Bei Erfolg ein JSON-Objekt der Token-URI.
Beispiel für den Rückgabewert:
{"tokenURI": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\
.ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
totalSupply
Diese Methode gibt die Gesamtanzahl der Münztoken zurück. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@GetMethod()
@Validator()
public async totalSupply() {
  await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.totalSupply', 'TOKEN');
  return await this.Ctx.ERC721Token.totalSupply();
}
Parameter:
  • Kein
Rückgabewert:
  • Bei Erfolg ein JSON-Objekt der Tokenanzahl.
Beispiel für den Rückgabewert:
{"totalSupply": 3}
totalNetSupply
Diese Methode gibt die Gesamtanzahl der Münztoken abzüglich der Anzahl der gebrannten Token zurück. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@GetMethod()
@Validator()
public async totalNetSupply() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.totalNetSupply', 'TOKEN');
    return await this.Ctx.ERC721Token.getTotalMintedTokens();
}
Parameter:
  • Kein
Rückgabewert:
  • Bei Erfolg ein JSON-Objekt der Tokenanzahl.
Beispiel für den Rückgabewert:
{"totalNetSupply": 1}

Methoden für die Accountverwaltung

createAccount
Diese Methode erstellt einen Account für einen angegebenen Benutzer und ein Token. Ein Konto muss für jeden Benutzer erstellt werden, der jederzeit Token hat. Konten verfolgen die Anzahl der NFTs, die ein Benutzer hat. Benutzer müssen über Konten im Netzwerk verfügen, um tokenbezogene Vorgänge abzuschließen. Sie können nur einen NFT-Account pro Benutzer erstellen.

Eine Account-ID ist eine alphanumerische Gruppe von Zeichen mit dem Präfix oaccount~, gefolgt von einem SHA-256-Hash der Mitgliedschaftsserviceprovider-ID (orgId) des Benutzers in der aktuellen Netzwerkorganisation, dem Benutzernamen oder der E-Mail-ID (userId) des Instanzeigentümers oder des bei der Instanz angemeldeten Benutzers und der Konstantenzeichenfolge nft. Diese Methode kann nur vom Token Admin des Chaincodes aufgerufen werden.

@Validator(yup.string(), yup.string(), yup.string())
public async createAccount(org_id: string, user_id: string, token_type: string) {
  await this.Ctx.Auth.checkAuthorization("ACCOUNT.createAccount", "TOKEN", { org_id });
  return await this.Ctx.Account.createAccount(org_id, user_id, token_type);
}
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
  • tokenType: string: Der einzige unterstützte Tokentyp ist nonfungible.
Rückgabewert:
  • Bei Erfolg ein JSON-Objekt des erstellten Accounts. Der Parameter bapAccountVersion ist im Accountobjekt zur internen Verwendung definiert.
Beispiel für den Rückgabewert:
{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "bapAccountVersion": 0,
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
balanceOf
Diese Methode gibt die Gesamtanzahl der NFTs zurück, die ein angegebener Benutzer hält. Diese Methode kann nur von einem Token Admin des Chaincodes oder vom Accounteigentümer aufgerufen werden.
@GetMethod()
@Validator(yup.string(), yup.string())
 public async balanceOf(orgId: string, userId: string) {
     await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.balanceOf', 'TOKEN', { orgId, userId });
     const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
     return await this.Ctx.ERC721Account.balanceOf(accountId);
 }
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Ein JSON-Objekt der aktuellen NFT-Anzahl.
Beispiel für den Rückgabewert:
{"totalNfts": 0}
getAllAccounts
Diese Methode gibt eine Liste aller Konten zurück. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden. Diese Methode verwendet SQL-reiche Berkeley DB-Abfragen und kann nur aufgerufen werden, wenn eine Verbindung mit dem Remote-Netzwerk von Oracle Blockchain Platform hergestellt wird.
@GetMethod()
@Validator()
public async getAllAccounts() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.getAllAccounts', 'TOKEN');
    return await this.Ctx.ERC721Account.getAllAccounts();
}
Parameter:
  • Kein
Rückgabewert:
  • Bei Erfolg ein JSON-Array aller Konten.
Beispiel für den Rückgabewert:
[
    {
        "key": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "valueJson": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }    
    }
]
getAccountByUser
Diese Methode gibt Accountdetails für einen angegebenen Benutzer zurück. Diese Methode kann nur von einem Token Admin des Chaincodes oder dem Account Owner des Accounts aufgerufen werden.
@GetMethod()
@Validator(yup.string(), yup.string())
public async getAccountByUser(orgId: string, userId: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.getAccountByUser', 'TOKEN', { orgId, userId });
    return await this.Ctx.ERC721Account.getAccountWithStatusByUser(orgId, userId);
}
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg ein JSON-Accountobjekt, das die folgenden Eigenschaften enthält:
  • bapAccountVersion: Ein Accountobjektparameter zur internen Verwendung.
  • status: Der aktuelle Status des Benutzeraccounts.
  • accountId: Die ID des Benutzeraccounts.
  • userId: Der Benutzername oder die E-Mail-ID des Benutzers.
  • orgId: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • tokenType: Der Tokentyp, den der Account speichert.
  • noOfNfts: Die Gesamtanzahl der NFTs, die vom Konto gehalten werden.
Beispiel für den Rückgabewert:
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "accountId": "oaccount~cc301bee057f14236a97d434909ec1084970921b008f6baab09c2a0f5f419a9a",
  "userId": "idcqa",
  "orgId": "appdev",
  "tokenType": "nonfungible",
  "noOfNfts": 0
}
getUserByAccountId
Diese Methode gibt die Benutzerdetails eines angegebenen Accounts zurück. Diese Methode kann von jedem Benutzer aufgerufen werden.
@GetMethod()
@Validator(yup.string())
public async getUserByAccountId(accountId: string) {
    return await this.Ctx.ERC721Account.getUserByAccountId(accountId);
}
Parameter:
  • accountId: string: Die ID des Accounts.
Rückgabewert:
  • Bei Erfolg ein JSON-Objekt der Benutzerdetails (orgId und userId).
Beispiel für den Rückgabewert:
{
  "userId": "admin",
  "orgId": "Org1MSP"
}
getAccountHistory
Diese Methode gibt die Accounthistorie für einen angegebenen Benutzer zurück. Dies ist eine asynchrone Methode. Diese Methode kann nur vom Token Admin des Chaincodes oder vom Accounteigentümer aufgerufen werden.
@GetMethod()
@Validator(yup.string(), yup.string())
public async getAccountHistory(orgId: string, userId: string) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.history', 'TOKEN', { accountId });
    return await this.Ctx.ERC721Account.history(accountId);
}
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg ein JSON-Objekt der Accounthistorie. Der Parameter bapAccountVersion ist im Accountobjekt zur internen Verwendung definiert.
Beispiel für den Rückgabewert:
[
    {
        "trxId": "6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
        "timeStamp": 1649151044,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 5,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "a605f1fa62e511c2945fce5437f983a5e70ec814b82520d3ecd2d81e3ecf53a3",
        "timeStamp": 1649151022,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 4,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 2
        }
    },
    {
        "trxId": "ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timeStamp": 1649150910,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 3,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timeStamp": 1649149545,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 2,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 0
        }
    },
    {
        "trxId": "e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timeStamp": 1649147442,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 1,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "d2d1f9c898707ae831e9361bc25da6369eac37b10c87dc04d18d6f3808222f08",
        "timeStamp": 1649137534,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 0,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 0
        }
    }
]

Methoden für die Rollenverwaltung

addRole
Diese Methode fügt einem angegebenen Benutzer eine Rolle hinzu. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@Validator(yup.string(), yup.string(), yup.string())
public async addRole(role: string, orgId: string, userId: string) {
   const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
   await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.addRoleMember', 'TOKEN');
   return await this.Ctx.ERC721Token.addRoleMember(role, accountId);
}
Parameter:
  • role: string: Der Name der Rolle, die dem angegebenen Benutzer hinzugefügt werden soll. Das Verhalten mintable und burnable entspricht den Eigenschaften minter_role_name und burner_role_name der Spezifikationsdatei.
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg eine Nachricht mit Accountdetails.
Beispiel für den Rückgabewert:
{"msg": "Successfully added role 'minter' to Account Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
removeRole
Diese Methode entfernt eine Rolle von einem angegebenen Benutzer. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@Validator(yup.string(), yup.string(), yup.string())
public async removeRole(role: string, orgId: string, userId: string) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.removeRoleMember', 'TOKEN');
    return await this.Ctx.ERC721Token.removeRoleMember(role, accountId);
}
Parameter:
  • role: string: Der Name der Rolle, die vom angegebenen Benutzer entfernt werden soll. Das Verhalten mintable und burnable entspricht den Eigenschaften minter_role_name und burner_role_name der Spezifikationsdatei.
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg eine Nachricht mit Accountdetails.
Beispiel für den Rückgabewert:
{"msg": "Successfully removed role 'minter' from Account Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
getAccountsByRole
Diese Methode gibt eine Liste aller Konto-IDs für eine angegebene Rolle zurück. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@GetMethod()
@Validator(yup.string())
public async getAccountsByRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ROLE.getAccountsByRole', 'TOKEN');
    return await this.Ctx.ERC721Role.getAccountsByRole(role);
}
Parameter:
  • role: string: Der Name der zu suchenden Rolle.
Rückgabewert:
  • Bei Erfolg ein JSON-Array mit Konto-IDs.
Beispiel für den Rückgabewert:
{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
getUsersByRole
Diese Methode gibt eine Liste aller Benutzer für eine angegebene Rolle zurück. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@GetMethod()
@Validator(yup.string())
public async getUsersByRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ROLE.getUsersByRole', 'TOKEN');
    return await this.Ctx.ERC721Role.getUsersByRole(role);
}
Parameter:
  • role: string: Der Name der zu suchenden Rolle.
Rückgabewert:
  • Bei Erfolg ein JSON-Array der Benutzerobjekte (orgId und userId).
Beispiel für den Rückgabewert:
{
    "users": [
        {
            "userId": "admin",
            "orgId": "Org1MSP"
        }
    ]
}
isInRole
Diese Methode gibt einen booleschen Wert zurück, der angibt, ob ein Benutzer eine angegebene Rolle hat. Diese Methode kann nur von einem Token Admin des Chaincodes oder dem Account Owner des Accounts aufgerufen werden.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string())
public async isInRole(orgId: string, userId: string, role: string) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.isInRole', 'TOKEN',{ accountId });
    return { result: await this.Ctx.ERC721Token.isInRole(role, accountId) };
}
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
  • role: string: Der Name der zu suchenden Rolle.
Rückgabewert:
  • Bei Erfolg eine JSON-Zeichenfolge des booleschen Ergebnisses.
Beispiel für den Rückgabewert:
{"result":"true"}

Methoden für das Transaktionshistorienmanagement

getAccountTransactionHistory
Diese Methode gibt die Kontotransaktionshistorie für einen angegebenen Benutzer zurück. Dies ist eine asynchrone Methode. Diese Methode kann nur vom Token Admin des Chaincodes oder vom Accounteigentümer aufgerufen werden.
@GetMethod()
@Validator(yup.string(), yup.string())
public async getAccountTransactionHistory(orgId: string, userId: string) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.getAccountTransactionHistory', 'TOKEN', { accountId });
    return await this.Ctx.ERC721Account.getAccountTransactionHistory(accountId)
}
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Beispiel für den Rückgabewert:
[
    {
        "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
        "timestamp": "2022-04-05T09:30:44.000Z",
        "tokenId": "monalisa1",
        "noOfNfts": 1,
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "BURN"
    },
    {
        "transactionId": "otransaction~a605f1fa62e511c2945fce5437f983a5e70ec814b82520d3ecd2d81e3ecf53a3",
        "timestamp": "2022-04-05T09:30:22.000Z",
        "tokenId": "monalisa1",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    },
    {
        "transactionId": "otransaction~ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timestamp": "2022-04-05T09:28:30.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "CREDIT"
    },
    {
        "transactionId": "otransaction~cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timestamp": "2022-04-05T09:05:45.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "DEBIT"
    },
    {
        "transactionId": "otransaction~e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timestamp": "2022-04-05T08:30:42.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    }
]
getAccountTransactionHistoryWithFilters
Diese Methode gibt die Kontotransaktionshistorie für einen angegebenen Benutzer zurück, gefiltert nach PageSize, Bookmark, startTime und endTime. Dies ist eine asynchrone Methode. Diese Methode kann nur aufgerufen werden, wenn sie mit dem Remote-Netzwerk von Oracle Blockchain Platform verbunden ist. Diese Methode kann nur vom Token Admin des Chaincodes oder vom Accounteigentümer aufgerufen werden.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.object().nullable())
public async getAccountTransactionHistoryWithFilters(orgId: string, userId: string, filters ?: Filters) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.getAccountTransactionHistoryWithFilters', 'TOKEN', { accountId });
    return await this.Ctx.ERC721Account.getAccountTransactionHistoryWithFilters(accountId, filters)
}
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
  • filters: object: Ein Objekt der Filterklasse, das vier Attribute enthält: pageSize, bookmark, startTime und endTime.
Beispiel für den Rückgabewert:
[
    {
        "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
        "timestamp": "2022-04-05T09:30:44.000Z",
        "tokenId": "monalisa1",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "BURN"
    },
    {
        "transactionId": "otransaction~a605f1fa62e511c2945fce5437f983a5e70ec814b82520d3ecd2d81e3ecf53a3",
        "timestamp": "2022-04-05T09:30:22.000Z",
        "tokenId": "monalisa1",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    },
    {
        "transactionId": "otransaction~ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timestamp": "2022-04-05T09:28:30.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "CREDIT"
    },
    {
        "transactionId": "otransaction~cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timestamp": "2022-04-05T09:05:45.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "DEBIT"
    },
    {
        "transactionId": "otransaction~e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timestamp": "2022-04-05T08:30:42.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    }
]
getTransactionById
Diese Methode gibt die Transaktionshistorie für eine angegebene Transaktions-ID zurück. Dies ist eine asynchrone Methode. Diese Methode kann nur von einem Token Admin des Chaincodes oder vom Accounteigentümer aufgerufen werden.
@GetMethod()
@Validator(yup.string())
public async getTransactionById(transactionId: string) {
    return await this.Ctx.ERC721Transaction.getTransactionById(transactionId);
}
Parameter:
  • transactionId: string: Die ID der Transaktion, die das Präfix otransaction~ gefolgt vom 64-Bit-Hash im Hexadezimalformat ist.
Beispiel für den Rückgabewert:
{
    "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
    "history": [
        {
            "trxId": "6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
            "timeStamp": 1649151044,
            "value": {
                "assetType": "otransaction",
                "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
                "tokenId": "monalisa1",
                "fromAccountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
                "toAccountId": "",
                "triggeredByAccountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
                "transactionType": "BURN",
                "timestamp": "2022-04-05T09:30:44.000Z",
            }
        }
    ]
}
deleteHistoricalTransactions
Diese Methode löscht Transaktionen, die älter als ein angegebener Zeitstempel in der Statusdatenbank sind. Dies ist eine asynchrone Methode. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@Validator(yup.date())
public async deleteHistoricalTransactions(timeToExpiration: Date) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TRANSACTION.deleteTransactions', 'TOKEN');
    return await this.Ctx.ERC721Transaction.deleteTransactions(timeToExpiration);
}
Parameter:
  • timestamp: string: Ein Zeitstempel. Alle Transaktionen vor dem Zeitstempel werden gelöscht.
Beispiel für den Rückgabewert:
{
    "msg": "Successfuly deleted transaction older than date: Thu Apr 07 2022 21:18:59 GMT+0000 (Coordinated Universal Time).",
    "transactions": [
        "otransaction~30513757d8b647fffaafac440d743635f5c1b2e41b25ebd6b70b5bbf78a2643f",
        "otransaction~ac0e908c735297941ba58bb208ee61ff4816a1e54c090d68024f82adf743892b"
    ]
}

Methoden für Token Behavior Management - Mintable Behavior

create<Token Name>Token
Diese Methode erstellt (mints) eine NFT. Das Asset und die zugehörigen Eigenschaften werden in der Statusdatenbank gespeichert. Der Aufrufer dieser Transaktion muss ein Token-Konto haben. Der Aufrufer dieser Transaktion wird zum Eigentümer der NFT. Wenn die Tokenspezifikationsdatei den Abschnitt roles für behaviors und die Eigenschaft minter_role_name für roles enthält, muss der Aufrufer der Transaktion die Minter-Rolle haben. Andernfalls kann jeder Anrufer NFTs prägen.
@Validator(< Token Class >)
public async create< Token Name >Token(tokenAsset: <Token Class>) {
    return await this.Ctx.ERC721Token.createToken(tokenAsset);
}
Parameter:
  • tokenAsset: <Token Class>: Das Tokenasset, das geprägt werden soll. Weitere Informationen zu den Eigenschaften des Tokenassets finden Sie in der Eingabespezifikationsdatei.
Rückgabewert:
  • Bei Erfolg ein JSON-Tokenassetobjekt, das die folgenden Eigenschaften enthält:
  • metadata: JSON-Informationen, die das Token beschreiben.
  • createdBy: Die Konto-ID des Benutzers, der die Transaktion zum Minen des Tokens aufgerufen hat.
  • creationDate: Der Zeitstempel der Transaktion.
  • isBurned: Ein boolescher Wert, der angibt, ob die mit tokenId identifizierte NFT gebrannt wird.
  • tokenName: Der Name des Tokens.
  • tokenDesc: Die Beschreibung des Tokens.
  • symbol: Das Symbol des Tokens.
  • tokenStandard: Der Standard des Tokens.
  • tokenType: Der Tokentyp, der von diesem Account gehalten wird.
  • tokenUnit: Die Einheit des Tokens.
  • behaviors: Eine Beschreibung aller Tokenverhaltensweisen.
  • mintable: Eine Beschreibung der Eigenschaften des abdruckbaren Verhaltens. Die Eigenschaft max_mint_quantity gibt die maximale Anzahl von NFTs dieser Tokenklasse an, die erstellt werden können.
  • owner: Die Konto-ID des aktuellen Eigentümers des Tokens. Während des Prägeprozesses wird der Aufrufer dieser Methode zum Eigentümer des Tokens.
  • tokenUri: Die URI des Tokens.
Beispiel für den Rückgabewert:
{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "isBurned": false,
    "tokenUri": "\"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg\"",
    "price": 100,
    "on_sale_flag": false
}
update<Token Name>Token
Diese Methode aktualisiert Tokeneigenschaften. Diese Methode kann nur von dem Benutzer aufgerufen werden, der Eigentümer oder Ersteller des Tokens ist. Nachdem ein Tokenasset erstellt wurde, kann nur der Tokeneigentümer die benutzerdefinierten Eigenschaften des Tokens aktualisieren. Wenn der Benutzer sowohl Tokeneigentümer als auch Ersteller eines Tokens ist, kann er auch die Eigenschaft TokenDesc aktualisieren. Tokenmetadaten können nicht aktualisiert werden. Sie müssen alle Token-Eigenschaften an diese Methode übergeben, auch wenn Sie nur bestimmte Eigenschaften aktualisieren möchten.
@Validator(<Token Class>)
public async update<Token name>Token(tokenAsset: <Token Class>) {
    return await this.Ctx.ERC721Token.updateToken(tokenAsset);
}
Parameter:
  • tokenAsset: <Token Class>: Das zu aktualisierende Tokenasset. Weitere Informationen zu den Eigenschaften des Tokenassets finden Sie in der Eingabespezifikationsdatei.
Rückgabewert:
  • Bei Erfolg ein aktualisiertes JSON-Tokenassetobjekt
Beispiel für den Rückgabewert:
{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "isBurned": false,
    "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
    "price": 100,
    "on_sale_flag": true
}

Methoden für die Verwaltung des Tokenverhaltens - Übertragbares Verhalten

safeTransferFrom
Dies ist eine asynchrone Funktion. Diese Methode überträgt das Eigentum an der angegebenen NFT vom Anrufer auf ein anderes Konto. Diese Methode umfasst die folgenden Validierungen:
  • Der Token existiert und wird nicht gebrannt.
  • Absenderkonto und Empfängerkonto sind vorhanden und nicht dasselbe Konto.
  • Der Absenderaccount ist Eigentümer des Tokens.
  • Der Aufrufer der Funktion ist der Absender.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.string().max(2000))
public async safeTransferFrom(fromOrgId: string, fromUserId: string, toOrgId: string, toUserId: string, tokenId: string, data?: string) {
    const tokenAsset = await this.getTokenObject(tokenId);
    const fromAccountId = await this.Ctx.ERC721Account.generateAccountId(fromOrgId, fromUserId);
    const toAccountId = await this.Ctx.ERC721Account.generateAccountId(toOrgId, toUserId);
    return await this.Ctx.ERC721Token.safeTransferFrom(fromAccountId, toAccountId, tokenAsset, data);
}
Parameter:
  • fromOrgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Absenders und Tokeneigentümers in der aktuellen Organisation.
  • fromUserId: string: Der Benutzername oder die E-Mail-ID des Absenders und Tokeneigentümers.
  • toOrgId: string: Die ID des Membership Service Providers (MSP) des Empfängers in der aktuellen Organisation.
  • toUserId: string: Der Benutzername oder die E-Mail-ID des Empfängers.
  • tokenId: string: Die ID des zu übertragenden Tokens.
  • data: string - Optionale zusätzliche Informationen zum Speichern im Transaktionsdatensatz.
Rückgabewert:
  • Bei Erfolg eine Nachricht mit den Absender- und Empfängerkontodetails.
Beispiel für den Rückgabewert:
{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin) to Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
transferFrom
Dies ist eine asynchrone Funktion. Diese Methode überträgt das Eigentum an der angegebenen NFT von einem Absenderkonto auf ein Empfängerkonto. Es liegt in der Verantwortung des Anrufers, die richtigen Parameter zu übergeben. Diese Methode kann von jedem Benutzer aufgerufen werden, nicht nur vom Token-Eigentümer. Diese Methode umfasst die folgenden Validierungen:
  • Der Token existiert und wird nicht gebrannt.
  • Absenderkonto und Empfängerkonto sind vorhanden und nicht dasselbe Konto.
  • Der Absenderaccount ist Eigentümer des Tokens.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string())
public async transferFrom(fromOrgId: string, fromUserId: string, toOrgId: string, toUserId: string, tokenId: string) {
    const tokenAsset = await this.getTokenObject(tokenId);
    const fromAccountId = await this.Ctx.ERC721Account.generateAccountId(fromOrgId, fromUserId);
    const toAccountId = await this.Ctx.ERC721Account.generateAccountId(toOrgId, toUserId);
    return await this.Ctx.ERC721Token.transferFrom(fromAccountId, toAccountId, tokenAsset);
}
Parameter:
  • fromOrgId: string: Die ID des Mitgliedschaftsserviceproviders (MSP) des Absenders in der aktuellen Organisation.
  • fromUserId: string: Der Benutzername oder die E-Mail-ID des Absenders.
  • toOrgId: string: Die ID des Membership Service Providers (MSP) des Empfängers in der aktuellen Organisation.
  • toUserId: string: Der Benutzername oder die E-Mail-ID des Empfängers.
  • tokenId: string: Die ID des zu übertragenden Tokens.
Rückgabewert:
  • Bei Erfolg eine Nachricht mit den Absender- und Empfängerkontodetails.
Beispiel für den Rückgabewert:
{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1) to Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}

Methoden für die Verwaltung des Tokenverhaltens - Burnable Behavior

burn
Diese Methode deaktiviert oder brennt die angegebene NFT aus dem Konto des Anrufers. Der Aufrufer dieser Methode muss ein Konto haben. Ein Token kann nur gebrannt werden, wenn die Tokenspezifikationsdatei das Verhalten burnable enthält. Wenn im Abschnitt roles der Spezifikationsdatei keine Eigenschaft burner_role_name angegeben ist, kann der Eigentümer des Tokens das Token brennen. Wenn eine burner_role_name-Eigenschaft im Abschnitt roles angegeben wird, kann der Benutzer die Burner-Rolle zuweisen, die auch der Minter (Ersteller) oder Eigentümer des Tokens ist, das Token brennen.
@Validator(yup.string())
public async burn(tokenId: string) {
    const tokenAsset = await this.getTokenObject(tokenId);
    return await this.Ctx.ERC721Token.burn(tokenAsset);
}
Parameter:
  • tokenId: string: Die ID des zu brennenden Tokens.
Rückgabewert:
  • Bei Erfolg eine Nachricht mit den Accountdetails.
Beispiel für den Rückgabewert:
{"msg": "Successfully burned NFT token: 'monalisa1' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
burnNFT
Diese Methode deaktiviert oder brennt die angegebene NFT aus dem Konto des Aufrufers und gibt ein Tokenobjekt und eine Tokenhistorie zurück. Der Aufrufer dieser Methode muss ein Konto haben. Ein Token kann nur gebrannt werden, wenn die Tokenspezifikationsdatei das Verhalten burnable enthält. Wenn im Abschnitt roles der Spezifikationsdatei keine Eigenschaft burner_role_name angegeben ist, kann der Eigentümer des Tokens das Token brennen. Wenn eine burner_role_name-Eigenschaft im Abschnitt roles angegeben wird, kann der Benutzer die Burner-Rolle zuweisen, die auch der Minter (Ersteller) oder Eigentümer des Tokens ist, das Token brennen.
@Validator(yup.string())
public async burnNFT(tokenId: string) {
    const token = await this.Ctx.ERC721Token.get(tokenId)
    if (token.isBurned === true) {
      throw new Error(`token with tokenId ${tokenId} is already burned`);
    }
    const tokenHistory = await this.Ctx.ERC721Token.history(tokenId);
    await this.burn(tokenId);
    token.tokenId = parseInt(token.tokenId);
    if(Number.isNaN(token.tokenId)) {
      throw new Error(`tokenId is expected to be integer but found ${tokenId}`)
    }
    token.isBurned = true;
    return {...token, tokenHistory: JSON.stringify(tokenHistory)};
}
Parameter:
  • tokenId: string: Die ID des zu brennenden Tokens.
Rückgabewert:
  • Bei Erfolg ein Tokenobjekt, das Informationen zur Tokenhistorie enthält.
Beispiel für den Rückgabewert:
{
    "assetType": "otoken",
    "tokenId": 1,
    "tokenName": "artcollection",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2023-08-22T07:36:50.000Z",
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "isBurned": true,
    "tokenUri": "example.com",
    "price": 120,
    "on_sale_flag": false,
    "tokenHistory": "[{\"trxId\":\"732438a85b5e8fc76c5254e54602b29d583543b103fafb5a28c0df384428bb50\",\"timeStamp\":\"2023-08-22T07:36:50.000Z\",\"value\":{\"assetType\":\"otoken\",\"tokenId\":\"1\",\"tokenName\":\"artcollection\",\"symbol\":\"ART\",\"tokenStandard\":\"erc721+\",\"tokenType\":\"nonfungible\",\"tokenUnit\":\"whole\",\"behaviors\":[\"indivisible\",\"singleton\",\"mintable\",\"transferable\",\"burnable\",\"roles\"],\"roles\":{\"minter_role_name\":\"minter\"},\"mintable\":{\"max_mint_quantity\":20000},\"createdBy\":\"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d\",\"creationDate\":\"2023-08-22T07:36:50.000Z\",\"owner\":\"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d\",\"isBurned\":false,\"tokenUri\":\"example.com\",\"price\":120,\"on_sale_flag\":false}}]"
}

Benutzerdefinierte Methoden

Mit den Token-SDK-Methoden können Sie benutzerdefinierte Methoden für Ihre Geschäftsanwendung schreiben.

Das folgende Beispiel zeigt, wie Token-SDK-Methoden in benutzerdefinierten Methoden verwendet werden. Wenn die Methode sell aufgerufen wird, wird ein Token für einen bestimmten Preis zum Verkauf gebucht.

@Validator(yup.string(), yup.number())
public async sell(token_id: string, selling_price: number) {
    try { 
        const token = await this.Ctx.ERC721Token.get(token_id);
        const t = new ArtCollection(token)
 /**  * price is a custom asset
      attribute to set the price of a non-fungible token in the
      marketplace  */
        t.price =  selling_price;
 /**  * on_sale_flag is a
      custom asset attribute that maintains non-fungible token selling status in the
      marketplace  */
        t.on_sale_flag = true;
        await this.Ctx.ERC721Token.updateToken(t);
        let msg = `Token ID : '${token_id}' has been posted for selling in the marketplace'`;
        return {msg}
        } catch(error) {
            throw new Error(error.message);
    }
}

NFT SDK-Methoden

Methoden für Access Control Management

Das NFT SDK bietet eine Zugriffskontrollfunktion. Einige Methoden können nur von einem Token Admin oder Account Owner des Tokens aufgerufen werden. Mit diesem Feature können Sie sicherstellen, dass Vorgänge nur von den beabsichtigten Benutzern ausgeführt werden. Jeder nicht autorisierte Zugriff führt zu einem Fehler. Um die Zugriffskontrollfunktion zu verwenden, importieren Sie die Klasse Authorization aus dem Modul ../lib/erc721-auth.
import { ERC721Authorization } from '../lib/erc721-auth';
checkAuthorization
Mit dieser Methode können Sie einem Vorgang eine Zugriffskontrollprüfung hinzufügen. Dies ist eine asynchrone Funktion. Die meisten automatisch generierten Methoden umfassen die Zugriffskontrolle. Bestimmte Tokenmethoden können nur vom Token ERC721Admin oder Account Owner oder vom Token MultipleAccountOwner für Benutzer mit mehreren Accounts ausgeführt werden. Die Methode checkAuthorization ist Teil der Klasse Authorization, auf die Sie über das Objekt Ctx zugreifen. Die Zugriffskontrollzuordnung wird in der Datei ../lib/constant.ts beschrieben, wie im folgenden Text dargestellt. Sie können die Zugriffskontrolle ändern, indem Sie die Datei ../lib/constant.ts bearbeiten. Um Ihre eigene Zugriffskontrolle zu verwenden oder die Zugriffskontrolle zu deaktivieren, entfernen Sie den Zugriffskontrollcode aus den automatisch generierten Controllermethoden und benutzerdefinierten Methoden.
export const TOKENACCESS = {
  ADMIN: {
    isUserTokenAdmin: ['Admin', 'MultipleAccountOwner'],
    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'],
  },
  ROLE: {
    getAccountsByRole: ['Admin'],
    getUsersByRole: ['Admin'],
  },
  TRANSACTION: {
    deleteTransactions: ['Admin'],
  },
  ACCOUNT: {
    createAccount: ['Admin'],
    getAllAccounts: ['Admin'],
    getAccountsByUser: ['Admin', 'MultipleAccountOwner'],
    getAccount: ['Admin', 'AccountOwner'],
    history: ['Admin', 'AccountOwner'],
    getAccountTransactionHistory: ['Admin', 'AccountOwner'],
    getAccountBalance: ['Admin', 'AccountOwner'],
    getAccountOnHoldBalance: ['Admin', 'AccountOwner'],
    getOnHoldIds: ['Admin', 'AccountOwner'],
  },
  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'],
    getAccountsByUser: ['Admin', 'MultipleAccountOwner'],
    history: ['Admin', 'AccountOwner'],
    getAccountTransactionHistory: ['Admin', 'AccountOwner'],
    getAccountTransactionHistoryWithFilters: ['Admin', 'AccountOwner'],
    balanceOf: ['Admin', 'MultipleAccountOwner'],
  }
}
Ctx.ERC721Auth.checkAuthorization(classFuncName: string, ...args)
Parameter:
  • classFuncName: string: Der Zuordnungswert zwischen der Klasse und den Methoden, wie in der Datei ../lib/constant.ts beschrieben.
  • ...args: Ein Variablenargument, bei dem args[0] die Konstante 'TOKEN' annimmt und args[1] den Parameter accountId verwendet, um eine Zugriffskontrollprüfung für eine AccountOwner hinzuzufügen. Um eine Zugriffskontrollprüfung für eine MultipleAccountOwner hinzuzufügen, verwendet args[1] den Parameter orgId, und args[2] übernimmt den Parameter userId.
Rückgabewert:
  • Auf Erfolg, ein Versprechen. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiele:

Admin-Zugriff

await this.Ctx.ERC721Auth.checkAuthorization('ADMIN.addAdmin', 'TOKEN');

AccountOwner-Zugriff

await this.Ctx.ERC721Auth.checkAuthorization('ACCOUNT.getAccountBalance', 'TOKEN', accountId);

MultipleAccountOwner-Zugriff

await this.Ctx.ERC721Auth.checkAuthorization('ADMIN.isUserTokenAdmin', 'TOKEN', orgId, userId);
isUserTokenAdmin
Diese Methode gibt den booleschen Wert true zurück, wenn der Aufrufer der Funktion ein Token Admin ist. Andernfalls gibt die Methode false zurück. Dies ist eine asynchrone statische Funktion.
Ctx.ERC721Auth.isUserTokenAdmin(orgId: string, userId: string)
Parameter:
  • orgId: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Netzwerkorganisation.
  • userId: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Eine boolesche Antwort und eine Fehlermeldung, wenn ein Fehler auftritt.
Beispiel:

await this.Ctx.Auth.isUserTokenAdmin('Org1MSP', 'user1');

{"result":false}
addAdmin
Mit dieser Methode wird ein Benutzer als Token Admin des Token Chaincodes hinzugefügt.
Ctx.ERC721Admin.addAdmin(orgId: string, userId: string)
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg eine Meldung, die Details für den Benutzer auflistet, der als Token Admin des Token Chaincodes hinzugefügt wurde. Bei einem Fehler ein Nicht-Nil-Fehlerobjekt, das eine Fehlermeldung enthält.
Beispiel:

await this.Ctx.ERC721Admin.addAdmin(orgId, userId)

{"msg": "Successfully added Admin (orgId: Org1MSP, userId: user1)"}
removeAdmin
Mit dieser Methode wird ein Benutzer als Token Admin des Token Chaincodes entfernt.
Ctx.ERC721Admin.removeAdmin(orgId: string, userId: string)
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg eine Meldung, in der Details für den Benutzer aufgeführt werden, die als Token Admin des Token Chaincodes entfernt wurden. Bei einem Fehler ein Nicht-Nil-Fehlerobjekt, das eine Fehlermeldung enthält.
Beispiel:

await this.Ctx.ERC721Admin.RemoveAdmin(orgId, userId)

{"msg": "Successfully removed Admin (orgId: Org1MSP, userId: user1)"}
getAllAdmins
Diese Methode gibt eine Liste aller Token Admin-Benutzer zurück.
Ctx.ERC721Admin.getAllAdmins()
Parameter:
  • Kein
Rückgabewert:
  • Bei Erfolg eine Liste aller Token Admin-Benutzer. Bei einem Fehler ein Nicht-Nil-Fehlerobjekt, das eine Fehlermeldung enthält.
Beispiel:

await this.Ctx.ERC721Admin.getAllAdmins()

{
    "admins": [
        {
            "orgId": "Org1MSP",
            "userId": "admin"
        }
    ]
}

Methoden für die Tokenkonfigurationsverwaltung

Die Methoden zur Verwaltung der Token-Konfiguration basieren auf dem ERC-721-Standard. Um die Methoden zur Verwaltung der Tokenkonfiguration zu verwenden, importieren Sie die Klasse Token aus dem Modul ../lib/erc721-token.

totalSupply
Diese Methode gibt die Gesamtanzahl der geprägten NFTs zurück. Dies ist eine asynchrone Funktion.
Ctx.ERC721Token.totalSupply()
Parameter:
  • Kein
Rückgabewert:
  • Bei Erfolg die Gesamtanzahl der Nettotoken im Datentyp "Zahl". Bei einem Fehler wird eine Fehlermeldung ausgegeben.
Beispiel:

await this.Ctx.ERC721Token.totalSupply(tokenAsset);

2000
get
Diese Methode gibt das angegebene Tokenobjekt zurück, wenn es in der Statusdatenbank vorhanden ist. Dies ist eine asynchrone statische Funktion.
Ctx.ERC721Token.get(tokenId: string)
Parameter:
  • tokenId: string: Die ID des Tokens.
Rückgabewert:
  • Bei Erfolg eine Zusage, die ein JSON-Objekt des Tokenassets enthält. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung
Beispiel:

await this.Ctx.ERC721Token.get(tokenId);

{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "transferredBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "transferredDate": "2022-04-05T09:28:30.000Z",
    "isBurned": false,
    "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
    "price": 100,
    "on_sale_flag": true
}
isTokenType
Diese Methode gibt an, ob ein Tokenasset mit der angegebenen ID vorhanden ist. Dies ist eine asynchrone statische Funktion.
Ctx.ERC721Token.isTokenType(tokenId: string)
Parameter:
  • tokenId: string: Die ID des Tokens.
Rückgabewert:
  • Bei Erfolg eine Zusage mit true, wenn ein Tokenasset mit der angegebenen ID vorhanden ist. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel:

await this.Ctx.ERC721Token.isTokenType(tokenId);

true
createToken
Diese Methode erstellt ein Token und speichert seine Eigenschaften in der Statusdatenbank. Diese Methode kann nur von Benutzern mit der Minter-Rolle aufgerufen werden. Dies ist eine asynchrone Funktion.
Ctx.ERC721Token.createToken(token: <Instance of Token Class>)
Parameter:
  • token: <Instance of Token Class>: Das zu erstellende Tokenasset.
Rückgabewert:
  • Bei Erfolg eine Promise-Nachricht mit Tokendetails. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel:

await this.Ctx.ERC721Token.createToken(tokenAsset);

{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "isBurned": false,
    "tokenUri": "\"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg\"",
    "price": 100,
    "on_sale_flag": false
}
updateToken
Diese Methode aktualisiert Tokeneigenschaften. Diese Methode kann nur vom Eigentümer oder Ersteller des Tokens aufgerufen werden. Nachdem ein Tokenasset erstellt wurde, kann nur der Tokeneigentümer die benutzerdefinierten Eigenschaften des Tokens aktualisieren. Wenn der Benutzer sowohl Tokeneigentümer als auch Ersteller eines Tokens ist, kann er auch die Eigenschaft TokenDesc aktualisieren. Tokenmetadaten können nicht aktualisiert werden. Sie müssen alle Token-Eigenschaften an diese Methode übergeben, auch wenn Sie nur bestimmte Eigenschaften aktualisieren möchten. Dies ist eine asynchrone Funktion.
Ctx.ERC721Token.updateToken(token: <Instance of Token Class>)
Parameter:
  • token: <Instance of Token Class>: Das zu aktualisierende Tokenasset.
Rückgabewert:
  • Bei Erfolg eine Promise-Nachricht mit Tokendetails. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel:

await this.Ctx.ERC721Token.updateToken(tokenAsset)

{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "isBurned": false,
    "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
    "price": 100,
    "on_sale_flag": true
}
getByRange
Diese Methode ruft die strukturbasierte getStateByRange-Methode intern auf. Obwohl eine Anlage mit der angegebenen ID aus dem Buch zurückgegeben wird, wird die Anlage mit dieser Methode in den aufrufenden Vermögensgegenstandstyp umgewandelt. Dies ist eine asynchrone statische Funktion.
@validator(yup.string(), yup.string())
public async getDigiCurrGetByRange(startId: string, endId: string) {
   return await this.Ctx.ERC721TOken.getByRange(startId, endId, PaintingNft);
}
Ctx.ERC721Token.getByRange(startId: string, endId: string, tokenClassReference?: <Instance of Token Class> )
Parameter:
  • startId: string: Der Startschlüssel des Bereichs. Dieser Schlüssel ist im Bereich enthalten.
  • endId: string: Der Endschlüssel des Bereichs. Dieser Schlüssel wird aus dem Bereich ausgeschlossen.
  • tokenClassReference: <Instance of Token Class>: Das Tokenasset, das ausgeführt werden soll.
Rückgabewert:
  • Beim Erfolg ein Versprechen mit einem Array von <Token Class>. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel für den Rückgabewert:
[
  {
      "metadata":{
         "painting_name":"Mona_Lisa",
         "description":"Mona Lisa Painting",
         "image":"monalisa.jpeg",
         "painter_name":"Leonardo_da_Vinci"
      },
      "assetType":"otoken",
      "tokenId":"monalisa",
      "tokenName":"artcollection",
      "tokenDesc":"token description",
      "symbol":"ART",
      "tokenStandard":"erc721+",
      "tokenType":"nonfungible",
      "tokenUnit":"whole",
      "behaviors":[
         "indivisible",
         "singleton",
         "mintable",
         "transferable",
         "burnable",
         "roles"
      ],
      "roles":{
         "minter_role_name":"minter"
      },
      "mintable":{
         "max_mint_quantity":20000
      },
      "owner":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
      "createdBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
      "transferredBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
      "creationDate":"2022-04-05T08:30:42.000Z",
      "transferredDate":"2022-04-05T09:28:30.000Z",
      "isBurned":false,
      "tokenUri":"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
      "price":100,
      "on_sale_flag":true
   }
]
history
Diese Methode gibt die Historie für das angegebene Token zurück. Dies ist eine asynchrone statische Funktion.
Ctx.ERC721Token.history(tokenId: string)
Parameter:
  • tokenId: string: Die ID des Tokens.
Rückgabewert:
  • Bei Erfolg ein Abfrage-Iterator der Promise-Historie für das angegebene Token. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel für den Rückgabewert:
[
   {
      "trxId":"e17a3154d5271be0492cbc7c12390b3480fec5a792d1cb1083e5335de56ebbd9",
      "timeStamp":1622614032,
      "isDelete":false,
      "value":{
         "metadata":{
            "painting_name":"Mona_Lisa",
            "description":"Mona Lisa Painting",
            "image":"monalisa.jpeg",
            "painter_name":"Leonardo_da_Vinci"
         },
         "assetType":"otoken",
         "tokenId":"monalisa",
         "tokenName":"artcollection",
         "tokenDesc":"token description",
         "symbol":"ART",
         "tokenStandard":"erc721+",
         "tokenType":"nonfungible",
         "tokenUnit":"whole",
         "behaviors":[
            "indivisible",
            "singleton",
            "mintable",
            "transferable",
            "burnable",
            "roles"
         ],
         "roles":{
            "minter_role_name":"minter"
         },
         "mintable":{
            "max_mint_quantity":20000
         },
         "owner":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
         "createdBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
         "creationDate":"2022-04-05T08:30:42.000Z",
         "isBurned":false,
         "tokenUri":"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
         "price":100,
         "on_sale_flag":"true"
      }
   },
   {
      "trxId":"dbcc4da410ad4d4a80996f090b313240f3f3d08aa2b5086afa8d0921f7b4c1e5",
      "timeStamp":1622643853,
      "isDelete":false,
      "value":{
         "metadata":{
            "painting_name":"Mona_Lisa",
            "description":"Mona Lisa Painting",
            "image":"monalisa.jpeg",
            "painter_name":"Leonardo_da_Vinci"
         },
         "assetType":"otoken",
         "tokenId":"monalisa",
         "tokenName":"artcollection",
         "tokenDesc":"token description",
         "symbol":"ART",
         "tokenStandard":"erc721+",
         "tokenType":"nonfungible",
         "tokenUnit":"whole",
         "behaviors":[
            "indivisible",
            "singleton",
            "mintable",
            "transferable",
            "burnable",
            "roles"
         ],
         "roles":{
            "minter_role_name":"minter"
         },
         "mintable":{
            "max_mint_quantity":20000
         },
         "owner":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
         "createdBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
         "transferredBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
         "creationDate":"2022-04-05T08:30:42.000Z",
         "transferredDate":"2022-04-05T09:28:30.000Z",
         "isBurned":false,
         "tokenUri":"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
         "price":100,
         "on_sale_flag":true
      }
   }
]
getAllTokens
Diese Methode gibt alle Tokenassets zurück, die in der Statusdatenbank gespeichert sind. Diese Methode verwendet SQL-reiche Berkeley DB-Abfragen und kann nur aufgerufen werden, wenn eine Verbindung mit dem Remote-Netzwerk von Oracle Blockchain Platform hergestellt wird. Dies ist eine asynchrone statische Funktion.
Ctx.ERC721Token.getAllTokens()
Parameter:
  • Kein
Rückgabewert:
  • Bei Erfolg ein Versprechen mit allen Token-Assets. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel:

await this.Ctx.ERC721Token.getAllTokens();

{
   "returnCode":"Success",
   "error":"",
   "result":{
      "txid":"98e0a0a115803d25b843d630e6b23c435a192a03eb0a301fc9375f05da49a8b2",
      "payload":[
         "           "{
            "metadata":{
               "painting_name":"Mona_Lisa",
               "description":"Mona Lisa Painting",
               "image":"monalisa.jpeg",
               "painter_name":"Leonardo_da_Vinci"
            },
            "assetType":"otoken",
            "tokenId":"monalisa",
            "tokenName":"artcollection",
            "tokenDesc":"token description",
            "symbol":"ART",
            "tokenStandard":"erc721+",
            "tokenType":"nonfungible",
            "tokenUnit":"whole",
            "behaviors":[
               "indivisible",
               "singleton",
               "mintable",
               "transferable",
               "burnable",
               "roles"
            ],
            "roles":{
               "minter_role_name":"minter"
            },
            "mintable":{
               "max_mint_quantity":20000
            },
            "owner":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "createdBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate":"2022-04-05T08:30:42.000Z",
            "isBurned":false,
            "tokenUri":"\"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg\"",
            "price":100,
            "on_sale_flag":false
         }"       "
      ],
      "encode":"JSON"
   }
}
getAllTokensByUser
Diese Methode gibt alle Token zurück, für die eine angegebene Konto-ID verantwortlich ist. Dies ist eine asynchrone statische Funktion.
Ctx.ERC721Token.getAllTokensByUser(accountId: string)
Parameter:
  • accountId: string: Die ID des Accounts.
Rückgabewert:
  • Bei Erfolg ein Abfrage-Iterator der Zusagehistorie für den angegebenen Account. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel für den Rückgabewert:
{
   "returnCode":"Success",
   "error":"",
   "result":{
      "txid":"98e0a0a115803d25b843d630e6b23c435a192a03eb0a301fc9375f05da49a8b2",
      "payload":[
         "           "{
            "metadata":{
               "painting_name":"Mona_Lisa",
               "description":"Mona Lisa Painting",
               "image":"monalisa.jpeg",
               "painter_name":"Leonardo_da_Vinci"
            },
            "assetType":"otoken",
            "tokenId":"monalisa",
            "tokenName":"artcollection",
            "tokenDesc":"token description",
            "symbol":"ART",
            "tokenStandard":"erc721+",
            "tokenType":"nonfungible",
            "tokenUnit":"whole",
            "behaviors":[
               "indivisible",
               "singleton",
               "mintable",
               "transferable",
               "burnable",
               "roles"
            ],
            "roles":{
               "minter_role_name":"minter"
            },
            "mintable":{
               "max_mint_quantity":20000
            },
            "owner":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "createdBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate":"2022-04-05T08:30:42.000Z",
            "isBurned":false,
            "tokenUri":"\"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg\"",
            "price":100,
            "on_sale_flag":false
         }"       "
      ],
      "encode":"JSON"
   }
ownerOf
Diese Methode gibt die Konto-ID des Eigentümers eines angegebenen Tokens zurück. Dies ist eine asynchrone statische Funktion.
Ctx.ERC721Token.ownerOf(tokenId: string)
Parameter:
  • tokenId: string: Die ID des Tokens.
Rückgabewert:
  • Bei erfolgreicher Ausführung wird ein Abfrage-Iterator der Promise-Historie für die angegebene Token-ID zurückgegeben. Bei einem Fehler wird eine Fehlermeldung abgelehnt
Beispiel für den Rückgabewert:
{"owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"}
tokenUri
Diese Methode gibt den URI für ein angegebenes Token zurück. Dies ist eine asynchrone statische Funktion.
Ctx.ERC721Token.tokenUri(tokenId: string)
Parameter:
  • tokenId: string: Die ID des Tokens.
Rückgabewert:
  • Bei erfolgreicher Ausführung wird ein Abfrage-Iterator der Promise-Historie für die angegebene Token-ID zurückgegeben. Bei einem Fehler wird eine Fehlermeldung abgelehnt
Beispiel für den Rückgabewert:
{"uri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
getTokenUri
Diese Methode gibt den URI für ein angegebenes Token zurück. Dies ist eine asynchrone statische Funktion.
Ctx.ERC721Token.getTokenUri(tokenId: string)
Parameter:
  • tokenId: string: Die ID des Tokens.
Rückgabewert:
  • Bei erfolgreicher Ausführung wird ein Abfrage-Iterator der Promise-Historie für die angegebene Token-ID zurückgegeben. Bei einem Fehler wird eine Fehlermeldung abgelehnt
Beispiel für den Rückgabewert:
{"tokenUri": https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
symbol
Diese Methode gibt das Symbol der Token-Klasse zurück.
Ctx.ERC721Token.symbol()
Parameter:
  • Kein
Rückgabewert:
  • Bei Erfolg ein JSON-Objekt mit dem Tokensymbol.
Beispiel für den Rückgabewert:
{"symbol": "PNT"}

Methoden für die Accountverwaltung

generateAccountId
Diese Methode gibt eine Konto-ID zurück, die durch Verkettung der ID des Mitgliedschaftsserviceproviders (orgId) und des Benutzernamens oder der E-Mail-ID (userId) gebildet wird und dann einen SHA-256-Hash erstellt wird.
Ctx.ERC721Account.generateAccountId(orgId: string, userId: string)
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg eine Zusage mit der generierten Konto-ID. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel:

await this.Ctx.ERC721Account.generateAccountId(orgId, userId)

oaccount~a0a60d54ba9e2ff349737d292ea10ebd9cc8f1991c11443c19d20aea299a9507
createAccount
Diese Methode erstellt einen Account für einen angegebenen Benutzer und ein Token. Ein Konto muss für jeden Benutzer erstellt werden, der jederzeit Token hat. Konten verfolgen die Anzahl der NFTs, die ein Benutzer hat. Benutzer müssen über Konten im Netzwerk verfügen, um tokenbezogene Vorgänge abzuschließen. Sie können nur einen NFT-Account pro Benutzer erstellen.

Eine Account-ID ist eine alphanumerische Gruppe von Zeichen mit dem Präfix oaccount~, gefolgt von einem SHA-256-Hash der Mitgliedschaftsserviceprovider-ID (orgId) des Benutzers in der aktuellen Netzwerkorganisation, dem Benutzernamen oder der E-Mail-ID (userId) des Instanzeigentümers oder des bei der Instanz angemeldeten Benutzers und der Konstantenzeichenfolge nft. Diese Methode kann nur vom Token Admin des Chaincodes aufgerufen werden.

Ctx.ERC721Account.createAccount(orgId: string, userId: string, tokenType: string)
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
  • tokenType: string: Der einzige unterstützte Tokentyp ist nonfungible.
Rückgabewert:
  • Bei Erfolg ein Versprechen mit dem neuen Accountobjekt. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung
Beispiel:

await this.Ctx.ERC721Account.CreateAccount(orgId, userId, tokenType)

{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
getAllAccounts
Diese Methode gibt eine Liste aller Konten zurück. Diese Methode verwendet SQL-reiche Berkeley DB-Abfragen und kann nur aufgerufen werden, wenn eine Verbindung mit dem Remote-Netzwerk von Oracle Blockchain Platform hergestellt wird.
Ctx.ERC721Account.getAllAccounts()
Parameter:
  • Kein
Rückgabewert:
  • Bei Erfolg ein Versprechen mit einem JSON-Objekt, das alle Accounts auflistet. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel für den Rückgabewert:
[
    {
        "key": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "valueJson": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }   
    }
]
history
Diese Methode gibt ein Array der Accounthistoriendetails für ein angegebenes Konto zurück.
Ctx.ERC721Account.history(accountId: string)
Parameter:
  • accountId: string: Die ID des Accounts.
Rückgabewert:
  • Bei erfolgreicher Ausführung ein map[string]interface{}-Array, das die Accounthistoriendetails für den angegebenen Account enthält. Die Kontodaten werden in der Karte unter dem Schlüssel value angezeigt. Bei einem Fehler ein Nicht-Nil-Fehlerobjekt, das eine Fehlermeldung enthält.
Beispiel:

await this.Ctx.ERC721Account.history(accountId)

[
    {
        "trxId": "6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
        "timeStamp": 1649151044,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "a605f1fa62e511c2945fce5437f983a5e70ec814b82520d3ecd2d81e3ecf53a3",
        "timeStamp": 1649151022,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 2
        }
    },
    {
        "trxId": "ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timeStamp": 1649150910,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timeStamp": 1649149545,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 0
        }
    },
    {
        "trxId": "e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timeStamp": 1649147442,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "d2d1f9c898707ae831e9361bc25da6369eac37b10c87dc04d18d6f3808222f08",
        "timeStamp": 1649137534,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 0
        }
    }
]
getUserByAccountId
Diese Methode gibt die Benutzerdetails für einen angegebenen Account zurück.
Ctx.ERC721Account.getUserByAccountId(accountId: string)
Parameter:
  • accountId: string: Die ID des Accounts.
Rückgabewert:
  • Bei Erfolg ein JSON-Objekt, das Benutzerdetails in den folgenden Eigenschaften enthält:
    • orgId: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Netzwerkorganisation.
    • userId: Der Benutzername oder die E-Mail-ID des Benutzers.
  • Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel:

await this.Ctx.ERC721Account.getUserByAccountById(accountId)

{
  "userId": "admin",
  "orgId": "Org1MSP"
}
getAccountWithStatusByUser
Diese Methode gibt Benutzerdetails für einen angegebenen Account zurück, einschließlich Accountstatus. Diese Methode kann nur von einem Token Admin des Chaincodes oder dem Account Owner des Accounts aufgerufen werden.
Ctx.ERC721Account.getAccountWithStatusByUser(orgId, userId)
Parameter:
  • orgId: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg ein JSON-Accountobjekt, das die folgenden Eigenschaften enthält:
  • accountId: Die ID des Benutzeraccounts.
  • userId: Der Benutzername oder die E-Mail-ID des Benutzers.
  • orgId: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • tokenType: Der Tokentyp, den der Account speichert.
  • noOfNfts: Die Gesamtanzahl der NFTs, die vom Konto gehalten werden.
  • bapAccountVersion: Ein Accountobjektparameter zur internen Verwendung.
  • status: Der aktuelle Status des Benutzeraccounts.
  • Bei einem Fehler ein Nicht-Nil-Objekt, das eine Fehlermeldung enthält.
Beispiel:

await this.Ctx.ERC721Account.getAccountWithStatusByUser(orgId, userId)

{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "accountId": "oaccount~cc301bee057f14236a97d434909ec1084970921b008f6baab09c2a0f5f419a9a",
  "userId": "idcqa",
  "orgId": "appdev",
  "tokenType": "nonfungible",
  "noOfNfts": 0
}
getAccountByUser
Diese Methode gibt Benutzerdetails für einen angegebenen Account zurück. Diese Methode kann nur von einem Token Admin des Chaincodes oder dem Account Owner des Accounts aufgerufen werden.
Ctx.ERC721Account.getAccountByUser(orgId, userId)
Parameter:
  • orgId: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg ein JSON-Accountobjekt, das die folgenden Eigenschaften enthält:
  • accountId: Die ID des Benutzeraccounts.
  • userId: Der Benutzername oder die E-Mail-ID des Benutzers.
  • orgId: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • tokenType: Der Tokentyp, den der Account speichert.
  • noOfNfts: Die Gesamtanzahl der NFTs, die vom Konto gehalten werden.
  • Bei einem Fehler ein Nicht-Nil-Objekt, das eine Fehlermeldung enthält.
Beispiel:

await this.Ctx.ERC721Account.getUserByAccountById(orgId, userId)

{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
balanceOf
Diese Methode gibt die Gesamtanzahl der NFTs zurück, die der angegebene Benutzer hält.
Ctx.ERC721Account.balanceOf(accountId: string)
Parameter:
  • accountId: string: Die Account-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg ein JSON-Objekt der aktuellen NFT-Anzahl. Bei einem Fehler ein Nicht-Nil-Fehlerobjekt, das eine Fehlermeldung enthält.
Beispiel:

await this.Ctx.ERC721Account.balanceOf(accountId)

{"totalNfts": 0}

Methoden für die Rollenverwaltung

addRoleMember
Diese Methode fügt einem angegebenen Benutzer und Token eine Rolle hinzu. Eine Konto-ID wird gebildet, indem ein SHA-256-Hash mit der Serviceprovider-ID der verketteten Mitgliedschaft (orgId) und dem Benutzernamen oder der E-Mail-ID (userId) erstellt wird. Dies ist eine asynchrone Funktion.
Ctx.ERC721Token.addRoleMember(role: string, accountId: string)
Parameter:
  • role: string: Der Name der Rolle, die dem angegebenen Benutzer hinzugefügt werden soll. Das Verhalten mintable und burnable entspricht den Eigenschaften minter_role_name und burner_role_name der Spezifikationsdatei.
  • accountId: string: Die Konto-ID für den Vorgang.
Rückgabewert:
  • Bei Erfolg ein Versprechen mit einer Nachricht, die die hinzugefügte Rolle und Konto-ID enthält. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung
Beispiel:

await this.Ctx.ERC721Token.addRoleMember(role, accountId);

{"msg": "Successfully added role 'minter' to Account Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
removeRoleMember
Diese Methode entfernt eine Rolle von einem angegebenen Benutzer und Token. Eine Konto-ID wird gebildet, indem ein SHA-256-Hash mit der Serviceprovider-ID der verketteten Mitgliedschaft (orgId) und dem Benutzernamen oder der E-Mail-ID (userId) erstellt wird. Dies ist eine asynchrone Funktion.
Ctx.ERC721Token.removeRoleMember(role: string, accountId: string)
Parameter:
  • role: string: Der Name der Rolle, die vom angegebenen Benutzer entfernt werden soll. Das Verhalten mintable und burnable entspricht den Eigenschaften minter_role_name und burner_role_name der Spezifikationsdatei.
  • accountId: string: Die Konto-ID für den Vorgang.
Rückgabewert:
  • Bei Erfolg ein Versprechen mit einer Nachricht, die die entfernte Rolle und Konto-ID enthält. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung
Beispiel:

await this.Ctx.ERC721Token.removeRoleMember(role, accountId);

{"msg": "Successfully removed role 'minter' from Account Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
isInRole
Diese Methode gibt einen booleschen Wert zurück, der angibt, ob ein Benutzer und ein Token eine angegebene Rolle haben. Eine Konto-ID wird gebildet, indem ein SHA-256-Hash mit der Serviceprovider-ID der verketteten Mitgliedschaft (orgId) und dem Benutzernamen oder der E-Mail-ID (userId) erstellt wird. Dies ist eine asynchrone Funktion.
Ctx.ERC721Token.isInRole(role: string, accountId: string)
Parameter:
  • role: string: Der Name der Rolle, die auf den angegebenen Benutzer geprüft werden soll. Das Verhalten mintable und burnable entspricht den Eigenschaften minter_role_name und burner_role_name der Spezifikationsdatei.
  • accountId: string: Die Konto-ID für den Vorgang.
Rückgabewert:
  • Bei Erfolg eine Zusage, die wahr ist, wenn die Rolle für die angegebene Konto-ID vorhanden ist, andernfalls falsch. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung
Beispiel:

await this.Ctx.ERC721Token.isInRole(role, accountId, tokenAsset)

{"result": "true"}
getAccountsByRole
Diese Methode gibt eine Liste aller Konto-IDs für eine angegebene Rolle zurück.
Ctx.ERC721Role.getAccountsByRole(roleName: string)
Parameter:
  • roleName: string: Der Name der zu suchenden Rolle.
Rückgabewert:
  • Bei Erfolg ein JSON-Array mit Konto-IDs. Bei einem Fehler ein Nicht-Nil-Fehlerobjekt, das eine Fehlermeldung enthält.
Beispiel:

await this.Ctx.ERC721Role.getAccountsByRole(userRole)

{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
getUsersByRole
Diese Methode gibt eine Liste aller Benutzer für eine angegebene Rolle zurück.
Ctx.ERC721Role.getUsersByRole(userRole: string)
Parameter:
  • role: string: Der Name der zu suchenden Rolle.
Rückgabewert:
  • Bei Erfolg ein JSON-Array mit Benutzerobjekten. Jedes Objekt enthält die Benutzer-ID und die Organisations-ID. Bei einem Fehler ein Nicht-Nil-Fehlerobjekt, das eine Fehlermeldung enthält.
Beispiel:

await this.Ctx.ERC721Role.getUsersByRole(userRole)

{
    "users": [
        {
            "userId": "admin",
            "orgId": "Org1MSP"
        }
    ]
}

Methoden für das Transaktionshistorienmanagement

getAccountTransactionHistory
Diese Methode gibt ein Array der Transaktionshistoriendetails für ein angegebenes Konto zurück.
Ctx.ERC721Account.getAccountTransactionHistory(accountId: string)
Parameter:
  • accountId: string: Die ID des Accounts.
Rückgabewert:
  • Bei Erfolg ein Array von Kontotransaktionsobjekten im JSON-Format:
    • transactionId: Die ID der Transaktion.
    • transactedAccount - Das Konto, mit dem die Transaktion ausgeführt wurde.
    • transactionType: Der Typ der Transaktion.
    • timestamp: Die Uhrzeit der Transaktion.
    • noOfNfts - Der Saldo des Anruferkontos.
    • Bei einem Fehler ein Nicht-Nil-Fehlerobjekt, das eine Fehlermeldung enthält.
Beispiel:

await this.Ctx.ERC721Account.GetAccountTransactionHistory(accountId)

[
    {
        "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
        "timestamp": "2022-04-05T09:30:44.000Z",
        "tokenId": "monalisa1",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "BURN"
    },
    {
        "transactionId": "otransaction~a605f1fa62e511c2945fce5437f983a5e70ec814b82520d3ecd2d81e3ecf53a3",
        "timestamp": "2022-04-05T09:30:22.000Z",
        "tokenId": "monalisa1",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    },
    {
        "transactionId": "otransaction~ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timestamp": "2022-04-05T09:28:30.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "CREDIT"
    },
    {
        "transactionId": "otransaction~cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timestamp": "2022-04-05T09:05:45.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "DEBIT"
    },
    {
        "transactionId": "otransaction~e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timestamp": "2022-04-05T08:30:42.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    }
]
getAccountTransactionHistoryWithFilters
Diese Methode gibt die Kontotransaktionshistorie für einen angegebenen Benutzer zurück, gefiltert nach PageSize, Bookmark, startTime und endTime. Diese Methode kann nur aufgerufen werden, wenn sie mit dem Remote-Netzwerk von Oracle Blockchain Platform verbunden ist.
async getAccountTransactionHistoryWithFilters(orgId: string, userId: string, filters?: Filters)
Parameter:
  • accountId: string: Die ID des Accounts.
  • filters: object: Ein Objekt der Filterklasse, das vier Attribute enthält: pageSize, bookmark, startTime und endTime. Wenn dieses Feld leer ist, werden alle Datensätze zurückgegeben. Die Eigenschaft PageSize bestimmt die Anzahl der zurückzugebenden Datensätze. Wenn PageSize 0 ist, ist die Standardseitengröße 20. Die Eigenschaft Bookmark bestimmt den Anfangsindex der zurückzugebenden Datensätze. Weitere Informationen finden Sie in der Hyperledger Fabric-Dokumentation. Die Eigenschaften StartTime und EndTime müssen im RFC-3339-Format angegeben werden.
Rückgabewert:
  • Bei Erfolg ein Array von Kontotransaktionsobjekten im JSON-Format:
    • transactionId: Die ID der Transaktion.
    • transactedAccount - Das Konto, mit dem die Transaktion ausgeführt wurde.
    • transactionType: Der Typ der Transaktion.
    • timestamp: Die Uhrzeit der Transaktion.
    • noOfNfts - Der Saldo des Anruferkontos.
    • Bei einem Fehler ein Nicht-Nil-Fehlerobjekt, das eine Fehlermeldung enthält.
Beispiel:

await this.Ctx.ERC721Account.getAccountTransactionHistoryWithFilters(accountId, filters)

[
    {
        "transactionId": "otransaction~ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timestamp": "2022-04-05T09:28:30.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "CREDIT"
    },
    {
        "transactionId": "otransaction~cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timestamp": "2022-04-05T09:05:45.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "DEBIT"
    },
    {
        "transactionId": "otransaction~e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timestamp": "2022-04-05T08:30:42.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    }
]
getTransactionById
Diese Methode gibt die Historie eines Transaction-Assets zurück.
Ctx.ERC721Transaction.getTransactionById(transactionId: string)
Parameter:
  • transactionId: string: Die ID des Transaktionsassets.
Beispiel:

await this.Ctx.ERC721Transaction.getTransactionById(transactionId)

{
    "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
    "history": [
        {
            "trxId": "6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
            "timeStamp": 1649151044,
            "value": {
                "assetType": "otransaction",
                "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
                "tokenId": "monalisa1",
                "fromAccountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
                "toAccountId": "",
                "triggeredByAccountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
                "transactionType": "BURN",
                "timestamp": "2022-04-05T09:30:44.000Z",
            }
        }
    ]
}
deleteHistoricalTransactions
Diese Methode löscht Transaktionen, die älter als ein angegebenes Datum sind, aus der Statusdatenbank.
Ctx.ERC721Transaction.deleteTransactions(timeToExpiration: Date)
Parameter:
  • timeToExpiration: Date: Datum und Uhrzeit. Transaktionen, die älter als die angegebene Zeit sind, werden gelöscht.
Beispiel:

await this.Ctx.ERC721Transaction.deleteTransactions(timeToExpiration)

{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "62ad6753cf2bfa54816b4c2f0ea325478b1cb1b84f8e13e6742c00f277310081",
        "payload": {
            "msg": "Successfuly deleted transaction older than date: Fri Apr 08 2022 00:00:00 GMT+0000 (Coordinated Universal Time).",
            "transactions": [
                "otransaction~e687531b71d943da2fb129638784fb93a96e7698013dfc51c8c6bf4f5f797059",
                "otransaction~18446adf59b669e12990a1cf3ea0a7a15764f967fa694cf263aee0cd5a21d952",
                "otransaction~5560d4b5e0b0d0b9a6e97dcd7f81241a5daf56497a7b6819c6a55cebacc106f2",
                "otransaction~f0a0a64ec1a0c92ac732706dd75ffbd3feecd9c48fc79e42c551485edf0542cb"
            ]
        },
        "encode": "JSON"
    }
}

Token Behavior Management - Mintable Behavior

getMaxMintQuantity
Diese Methode gibt die maximale Mindestmenge eines Tokens zurück. Wenn das Verhalten max_mint_quantity nicht in der Spezifikationsdatei konfiguriert ist, lautet der Standardwert 0, und eine unbegrenzte Anzahl von Token kann geprägt werden.
Ctx.ERC721Token.getMaxMintQuantity(token: <Instance of Token Class>)
Parameter:
  • token: <Instance of Token Class>: Das Tokenasset, das ausgeführt werden soll.
Rückgabewert:
  • Bei Erfolg die maximale präparierbare Menge des Tokens im Datentyp "Number". Bei einem Fehler wird eine Fehlermeldung ausgegeben.
Beispiel:

await this.Ctx.ERC721Token.getMaxMintQuantity(tokenAsset);

20000
getTotalMintedTokens
Diese Methode gibt die Gesamtanzahl der Token zurück, die im System für das angegebene Token verfügbar sind. Die Netto-Anzahl der verfügbaren Token ist die Gesamtanzahl der geprägten Token abzüglich der Anzahl der gebrannten Token. Dies ist eine asynchrone Funktion.
Ctx.ERC721Token.getTotalMintedTokens()
Parameter:
  • token: <Instance of Token Class>: Das Tokenasset, das ausgeführt werden soll.
Rückgabewert:
  • Bei Erfolg die Gesamtanzahl der geprägten Token im Datentyp "Number". Bei einem Fehler wird eine Fehlermeldung ausgegeben.
Beispiel:

await this.Ctx.ERC721Token.getTotalMintedTokens(tokenAsset);

4000

Token Behavior Management - Übertragbares Verhalten

safeTransferFrom
Dies ist eine asynchrone Funktion. Diese Methode überträgt das Eigentum an der angegebenen NFT vom Anrufer auf ein anderes Konto. Diese Methode umfasst die folgenden Validierungen:
  • Der Token existiert und wird nicht gebrannt.
  • Absenderkonto und Empfängerkonto sind vorhanden und nicht dasselbe Konto.
  • Der Absenderaccount ist Eigentümer des Tokens.
  • Der Aufrufer der Funktion ist der Absender.
Ctx.ERC721Token.safeTransferFrom(fromAccountId: string, toAccountId: string, token: <Instance of Token Class>, data?: string)
Parameter:
  • fromAccountId: string: Die Konto-ID des Absenders in der aktuellen Organisation.
  • toAccountId: string: Die Konto-ID des Empfängers in der aktuellen Organisation.
  • token: <Instance of Token Class>: Das zu transferierende Tokenasset.
  • data: string - Optionale zusätzliche Informationen zum Speichern in der Transaktion.
Rückgabewert:
  • Bei Erfolg ein Versprechen mit einer Erfolgsmeldung, die Kontodetails enthält. Account-IDs haben das Präfix oaccount~. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel:

await this.Ctx.ERC721Token.safeTransferFrom(fromAccountId, toAccountId, tokenAsset, data);

{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin) to Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
transferFrom
Dies ist eine asynchrone Funktion. Diese Methode überträgt das Eigentum an der angegebenen NFT von einem Absenderkonto auf ein Empfängerkonto. Es liegt in der Verantwortung des Anrufers, die richtigen Parameter zu übergeben. Diese Methode kann von jedem Benutzer aufgerufen werden, nicht nur vom Token-Eigentümer. Diese Methode umfasst die folgenden Validierungen:
  • Der Token existiert und wird nicht gebrannt.
  • Absenderkonto und Empfängerkonto sind vorhanden und nicht dasselbe Konto.
  • Der Absenderaccount ist Eigentümer des Tokens.
Ctx.ERC721Token.transferFrom(fromAccountId: string, toAccountId: string, token: <Instance of Token Class>)
Parameter:
  • fromAccountId: string: Die Konto-ID des Absenders in der aktuellen Organisation.
  • toAccountId: string: Die Konto-ID des Empfängers in der aktuellen Organisation.
  • token: <Instance of Token Class>: Das zu transferierende Tokenasset.
Rückgabewert:
  • Bei Erfolg ein Versprechen mit einer Erfolgsmeldung, die Kontodetails enthält. Account-IDs haben das Präfix oaccount~. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
\Beispiel:

await this.Ctx.ERC721Token.transferFrom(fromAccountId, toAccountId, tokeAsset, data);

{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1) to Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}

Token Behavior Management - Brennendes Verhalten

burn
Diese Methode deaktiviert oder brennt die angegebene NFT aus dem Konto des Anrufers. Der Aufrufer dieser Methode muss ein Konto haben. Ein Token kann nur gebrannt werden, wenn die Tokenspezifikationsdatei das Verhalten burnable enthält. Wenn im Abschnitt roles der Spezifikationsdatei keine Eigenschaft burner_role_name angegeben ist, kann der Eigentümer des Tokens das Token brennen. Wenn im Abschnitt roles eine Eigenschaft burner_role_name angegeben ist, kann der Benutzer die Brennerrolle zuweisen, die auch der Minter (Ersteller) des Tokens ist, das Token brennen. Dies ist eine asynchrone Funktion.
Ctx.ERC721Token.burn(token: <Instance of Token Class>)
Parameter:
  • token: <Instance of Token Class>: Das zu brennende Tokenasset.
Rückgabewert:
  • Bei Erfolg ein Versprechen mit einer Erfolgsmeldung, die Kontodetails enthält. Bei einem Fehler eine Ablehnung mit einer Fehlermeldung.
Beispiel:

await this.Ctx.ERC721Token.burn(tokenAsset);

{msg": "Successfully burned NFT token: 'monalisa1' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}