Progetto Go con blocco per struttura tassonomia token

Blockchain App Builder prende l'input dal file di specifica del token e genera un progetto di codice concatenato impalcato completamente funzionale.

Il progetto genera automaticamente classi e funzioni del ciclo di vita dei token, inclusi i metodi CRUD e non CRUD. La convalida degli argomenti, il marshalling/unmarshalling e la capacità di persistenza trasparente sono tutti supportati automaticamente.

Per informazioni sul progetto impalcato e sui metodi non direttamente correlati ai token, vedere Progetto codice catena go impalcato.

Modello

La funzionalità di persistenza trasparente, o ORM semplificato, viene acquisita nella classe OchainModel.

package src
type Digicur struct {
    AssetType               string                 `json:"AssetType" final:"otoken"`
    Token_id                string                 `json:"Token_id" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
    Token_name              string                 `json:"Token_name" final:"digicur"`
    Token_desc              string                 `json:"Token_desc" validate:"max=256"`
    Token_type              string                 `json:"Token_type" final:"fungible" validate:"regexp=^fungible$"`
    Behavior                []string               `json:"Behavior" final:"[\"divisible\",\"mintable\",\"transferable\",\"burnable\",\"holdable\",\"roles\"]"`
    Roles                   map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\",\"burner_role_name\":\"burner\",\"notary_role_name\":\"notary\"}"`
    Mintable                map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":20000}"`
    Divisible               map[string]interface{} `json:"Divisible" final:"{\"Decimal\":1}"`
    Token_to_currency_ratio int                    `json:"Token_to_currency_ratio" validate:"int"`
    Currency_representation string                 `json:"Currency_representation" validate:"string"`
    Metadata                interface{}            `json:"Metadata,omitempty"`
}

Controller

C'è solo un controller principale.

type Controller struct {
    Ctx trxcontext.TrxContext
}

È possibile creare un numero qualsiasi di classi, funzioni o file, ma solo i metodi definiti all'interno della classe controller principale sono richiamabili. Gli altri metodi sono nascosti.

È possibile utilizzare i metodi SDK token per scrivere metodi personalizzati per l'applicazione business.

Se si utilizzano più metodi SDK token in un metodo personalizzato, non utilizzare metodi che influiranno sulle stesse coppie chiave-valore nel database di stato.

Utilizzare invece il metodo BulkTransferTokens per eseguire il trasferimento a più account dall'account del chiamante, come mostrato nello snippet di codice riportato di seguito.

BulkTransferTokens(token_id string, flow: []map[string]interface{})

Nota

Se si utilizzano più metodi SDK token in un metodo personalizzato che potrebbe influire sulle stesse coppie chiave-valore nel database di stato, abilitare l'ottimizzazione MVCC per i codici concatenati token. Per ulteriori informazioni, vedere MVCC Optimization.

Metodi token generati automaticamente

Blockchain App Builder genera automaticamente metodi per supportare token e cicli di vita dei token. È possibile utilizzare questi metodi per inizializzare i token, gestire ruoli e account e completare altri task del ciclo di vita dei token senza alcuna codifica aggiuntiva. I metodi controller devono essere pubblici per poter essere richiamati. I nomi dei metodi pubblici iniziano con un carattere maiuscolo. I nomi dei metodi che iniziano con un carattere minuscolo sono privati.

Metodi per la gestione del controllo degli accessi

AddTokenAdmin
Questo metodo aggiunge un utente come Token Admin del codice concatenato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
func (t *Controller) AddTokenAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.AddAdmin", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.AddTokenAdmin(org_id, user_id)
}
Parametri:
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Token Admin del codice concatenato.
Esempio di valore restituito:
{
    "msg": "Successfully added Token Admin (Org_Id: Org1MSP, User_Id: user1)"
}
RemoveTokenAdmin
Questo metodo rimuove un utente come Token Admin del codice concatenato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
func (t *Controller) RemoveTokenAdmin(org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.RemoveAdmin", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.RemoveAdmin(org_id, user_id)
}
Parametri:
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Token Admin del codice concatenato.
Esempio di valore restituito:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsTokenAdmin
Questo metodo restituisce il valore booleano true se il chiamante della funzione è Token Admin, altrimenti restituisce false. Un Token Admin o Org Admin può chiamare questa funzione su qualsiasi altro utente della rete blockchain. Altri utenti possono chiamare questo metodo solo sui propri account.
func (t *Controller) IsTokenAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.IsTokenAdmin", "TOKEN", map[string]string{"org_id": org_id, "user_id": user_id})
      if err != nil || !auth {
            return false, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Auth.IsUserTokenAdmin(org_id, user_id)
}
Parametri:
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Il metodo restituisce true se il chiamante è Token Admin, altrimenti restituisce false.
Esempio di valore restituito:
{"result":false}
GetAllTokenAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono un Token Admin del codice concatenato. Questo metodo può essere chiamato solo dall'indirizzo Token Admin o Org Admin del codice concatenato.
func (t *Controller) GetAllTokenAdmins() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.GetAllAdmins", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.GetAllAdmins()
}
Parametri:
  • nessuno
Restituisce:
  • Una volta completata la procedura, una lista JSON di amministratori che include oggetti OrgId e UserId.
Esempio di valore restituito:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user2"}]}
AddOrgAdmin
Questo metodo aggiunge un utente come Org Admin dell'organizzazione. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
func (t *Controller) AddOrgAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.AddOrgAdmin", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.AddOrgAdmin(org_id, user_id)
}
Parametri:
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
Questo metodo rimuove un utente come Org Admin di un'organizzazione. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
func (t *Controller) RemoveOrgAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.RemoveOrgAdmin", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.RemoveOrgAdmin(org_id, user_id)
}
Parametri:
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
    "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
GetOrgAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono un Org Admin di un'organizzazione. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da qualsiasi Org Admin.
func (t *Controller) GetOrgAdmins() (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.GetOrgAdmins", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.GetAllOrgAdmins()
}
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, una lista JSON che include oggetti OrgId e UserId.
Esempio di valore restituito:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}

Metodi per la gestione della configurazione token

Init
Questo metodo viene richiamato quando viene distribuito il codice concatenato. Ogni Token Admin è identificato dalle informazioni user_id e org_id nel parametro obbligatorio adminList. user_id è il nome utente o l'ID e-mail del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza. org_id è l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Qualsiasi utente Token Admin può aggiungere e rimuovere altri utenti Token Admin chiamando i metodi AddTokenAdmin e RemoveTokenAdmin.
func (t *Controller) Init(adminList []admin.TokenAdminAsset) (interface{}, error) {
    list, err := t.Ctx.Admin.InitAdmin(adminList)
    if err != nil {
        return nil, fmt.Errorf("initializing admin list failed %s", err.Error())
    }
    return list, nil
}
Parametri:
  • adminList array: array di informazioni {user_id, org_id} che specifica la lista di amministratori di token. L'array adminList è un parametro obbligatorio.
Esempio di parametro, Mac OSX e CLI Linux:
'[{"user_id":"userid", "org_id":"OrgMSPId"}]'
Esempio di parametro, CLI Microsoft Windows:
"[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"
Esempio di parametro, console di Oracle Blockchain Platform:
["[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"]
Initialize<Token Name>Token
Questo metodo crea un token e inizializza le proprietà del token. L'asset e le relative proprietà vengono salvati nel database di stato. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato.
func (t *Controller) InitializeDigicurToken(asset Digicur) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Save", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.Save(&asset)
}
Parametri:
  • asset <Token Class>: l'asset token viene passato come parametro a questo metodo. Le proprietà dell'asset token sono descritte nel file del modello.
Restituisce:
  • In caso di operazione riuscita, una rappresentazione JSON dell'asset token creato.
Esempio di valore restituito:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
Update<Token Name>Token
Questo metodo aggiorna le proprietà del token. Dopo la creazione di un asset token, è possibile aggiornare solo la proprietà token_desc e le proprietà personalizzate. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
func (t *Controller) UpdateDigicurToken(asset Digicur) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Update", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.Update(&asset)
}
Parametri:
  • asset <Token Class>: l'asset token viene passato come parametro a questo metodo. Le proprietà dell'asset token sono descritte nel file del modello.
Restituisce:
  • Una volta completata, una rappresentazione JSON aggiornata dell'asset token.
Esempio di valore restituito:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetTokenDecimals
Questo metodo restituisce il numero di posizioni decimali configurate per un token frazionario. Se il comportamento divisible non è stato specificato per il token, il valore predefinito è 0. Questo metodo può essere chiamato solo da un Token Admin o Org Admin del codice concatenato.
func (t *Controller) GetTokenDecimals(token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokenDecimals", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    tokenDecimal, err := t.Ctx.Token.GetTokenDecimals(token_id)
    if err != nil {
        return nil, fmt.Errorf("Error in GetTokenDecimals %s", err.Error())
    }
    response := make(map[string]interface{})
    response["msg"] = fmt.Sprintf("Token Id: %s has %d decimal places.", token_id, tokenDecimal)
    return response, nil
}
Parametri:
  • token_id string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che mostra il numero di posizioni decimali del token.
Esempio di valore restituito:
{"msg":"Token Id: digiCurr101 has 1 decimal places."}
GetTokenById
Questo metodo restituisce un oggetto token se è presente nel database di stato. Questo metodo può essere chiamato solo da un Token Admin o Org Admin del codice concatenato.
func (t *Controller) GetTokenById(token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Get", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    tokenAsset, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return tokenAsset.Interface(), err
}
Parametri:
  • token_id string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON che rappresenta l'asset token.
Esempio di valore restituito:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetTokenHistory
Questo metodo restituisce la cronologia del token per un ID token specificato. Qualsiasi utente può chiamare questo metodo.
func (t *Controller) GetTokenHistory(token_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokenHistory", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.History(token_id)
}
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON che rappresenta la cronologia del token.
Esempio di valore restituito:
[
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:46:33Z",
        "TxId": "12333b8a4f63aa9b3a34072efcbd7df546c6d1e7d82a7a9596e899383656d6f7",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "updated description",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:04:25Z",
        "TxId": "99702e2dad7554a5ee4716a0d01d3e394cbce39bea8bade265d8911f30ebad0b",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetAllTokens
Questo metodo restituisce tutti i token memorizzati nel database di stato. Questo metodo può essere chiamato solo da un Token Admin o Org Admin del codice concatenato.
func (t *Controller) GetAllTokens() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetAllTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Token.GetAllTokens()
}
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON che rappresenta tutti gli asset token.
Esempio di valore restituito:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 2,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetTokensByName
Questo metodo restituisce tutti gli oggetti token con un nome specificato. Questo metodo può essere chiamato solo da un Token Admin o Org Admin del codice concatenato. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
func (t *Controller) GetTokensByName(token_name string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokensByName", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Token.GetTokensByName(token_name)
}
Parametri:
  • token_name string: il nome dei token da recuperare. Il nome corrisponde alla proprietà Token_name nel file di specifica. Il valore è il nome della classe del token.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON di tutti gli asset token corrispondenti al nome.
Esempio di valore restituito:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "key": "obp2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "",
            "Token_id": "obp2",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]

Metodi per la gestione degli account

CreateAccount
Questo metodo crea un account per un utente e un token specificati. È necessario creare un account per qualsiasi utente che avrà token in qualsiasi momento. I conti tengono traccia dei saldi, dei saldi in sospeso e della cronologia delle transazioni. Un ID account è un set alfanumerico di caratteri, preceduto da oaccount~<token asset name>~ e seguito da un hash del nome utente o dell'ID e-mail (user_id) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza, l'ID del provider di servizi di appartenenza (org_id) dell'utente nell'organizzazione di rete corrente. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
unc (t *Controller) CreateAccount(org_id string, user_id string, token_type string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.CreateAccount", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.CreateAccount(org_id, user_id, token_type)
}
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
  • token_type: string: il tipo di token, che deve essere fungible.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON dell'account creato. Il parametro BapAccountVersion è definito nell'oggetto account per uso interno.
Esempio di valore restituito:
{ 
   "AssetType":"oaccount",
   "AccountId":"oaccount~a73085a385bc96c4a45aa2dff032e7dede82c0664dee5f396b7c5854eeafd4bd",
   "BapAccountVersion": 0,
   "UserId":"user1",
   "OrgId":"Org1MSP",
   "AccountType":"fungible",
   "TokenId":"",
   "TokenName":"",
   "Balance":0,
   "BalanceOnHold":0
}
AssociateTokenToAccount
Questo metodo associa un token fungibile a un account. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione pertinente.
func (t *Controller) AssociateTokenToAccount(account_id string, token_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.AssociateToken", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.AssociateToken(account_id, token_id)
}
Parametri:
  • account_id string – L'ID dell'account.
  • token_id string: l'ID del token.
Restituisce:
  • Una volta completato, un oggetto JSON dell'account aggiornato. Il parametro BapAccountVersion è definito nell'oggetto account per uso interno.
Esempio di valore restituito:
{ 
"AssetType":"oaccount", 
"AccountId":"oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb", 
"BapAccountVersion": 0,
"UserId":"admin", 
"OrgId":"Org1MSP", 
"AccountType":"fungible", 
"TokenId":"token1", 
"TokenName":"loyaltok", 
"Balance":0, 
"BalanceOnHold":0 
}
GetAccount
Questo metodo restituisce i dettagli dell'account per un utente e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account.
func (t *Controller) GetAccount(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccount", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAccountWithStatus(account_id)
}
Parametri:
  • token_id string: l'ID del token.
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un oggetto account JSON che include le seguenti proprietà:
  • AccountId: l'ID dell'account utente.
  • UserId: il nome utente o l'ID e-mail dell'utente.
  • OrgId - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • TokenId: l'ID del token.
  • Balance: il saldo corrente del conto.
  • BalanceOnHold – Il saldo corrente del conto.
  • BapAccountVersion: parametro dell'oggetto account per uso interno.
  • Status: lo stato corrente dell'account utente.
Esempio di valore restituito:
{
  "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "AssetType": "oaccount",
  "Balance": 95,
  "BalanceOnHold": 0,
  "BapAccountVersion": 8,
  "OrgId": "appdev",
  "Status": "active",
  "TokenId": "obp1",
  "TokenName": "obptok",
  "TokenType": "fungible",
  "UserId": "idcqa"
}
GetAccountHistory
Questo metodo restituisce i dettagli della cronologia dell'account per un utente e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o dal AccountOwner dell'account.
func (t *Controller) GetAccountHistory(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.History", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.History(account_id)
}
Parametri:
  • token_id string: l'ID del token.
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un array di oggetti account JSON che include le proprietà riportate di seguito.
  • TxId: l'ID transazione della transazione restituito dal libro contabile.
  • Timestamp – Il tempo della transazione.
  • IsDelete: valore booleano che indica se il record viene eliminato.
  • Value: stringa JSON dell'oggetto account. Il parametro BapAccountVersion è definito nell'oggetto account per uso interno.
Esempio di valore restituito:
[
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:31:15Z",
      "TxId": "adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 100,
          "BalanceOnHold": 0,
          "BapAccountVersion": 1,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:30:23Z",
      "TxId": "8fbeda2ba60ba175091faae5ae369247775f2cba45c4d6d1ead6f0b05be84743",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:29:54Z",
      "TxId": "19bb296ae71709e91b097ba5d9ebd7f7522095880382fbf5913334a46a6026aa",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "",
          "TokenName": "",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  }
]
GetAccountOnHoldBalance
Questo metodo restituisce il saldo in sospeso corrente per un conto e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account.
func (t *Controller) GetAccountOnHoldBalance(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountOnHoldBalance", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      response, err := t.Ctx.Account.GetAccountOnHoldBalance(account_id)
      return response, err
}
Parametri:
  • token_id string: l'ID del token.
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, una rappresentazione JSON del saldo in sospeso corrente.
Esempio di valore restituito:
{
    "holding_balance": 0,
    "msg": "Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
GetAllAccounts
Questo metodo restituisce un elenco di tutti i conti. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
func (t *Controller) GetAllAccounts() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAllAccounts", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Account.GetAllAccounts()
}
Parametri:
  • nessuno
Restituisce:
  • Al successo, un array JSON di tutti gli account.
Esempio di valore restituito:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 100,
            "BalanceOnHold": 0,
            "BapAccountVersion": 1,
            "OrgId": "appdev",
            "TokenId": "t1",
            "TokenName": "obptok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    }
]
GetUserByAccountId
Questo metodo restituisce i dettagli utente (org_id e user_id) per un account specificato. Questo metodo può essere chiamato da qualsiasi utente del codice concatenato.
func (t *Controller) GetUserByAccountId(account_id string) (interface{}, error) {
    return t.Ctx.Account.GetUserByAccountById(account_id)
}
Parametri:
  • account_id string – L'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON dei dettagli utente (org_id, token_id e user_id).
Esempio di valore restituito:
{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}
GetAccountBalance
Questo metodo restituisce il saldo corrente per un conto e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account.
func (t *Controller) GetAccountBalance(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountBalance", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      response, err := t.Ctx.Account.GetAccountBalance(account_id)
      return response, err
}
Parametri:
  • token_id string: l'ID del token.
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Una volta completato, una rappresentazione JSON del saldo del conto corrente.
Esempio di valore restituito:
{"msg":"Current Balance of oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f is 0","user_balance":0}
GetAllOrgAccounts
Questo metodo restituisce un elenco di tutti i conti token appartenenti a un'organizzazione specificata. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
func (t *Controller) GetAllOrgAccounts(org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAllOrgAccounts", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAllOrgAccounts(org_id)
}
Parametri:
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli account per l'organizzazione specificata.
Esempio di valore restituito:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    },
    {
        "key": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
        "valueJson": {
            "AccountId": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "example_minter"
        }
    }
]

Metodi per gestione ruoli

AddRole
Questo metodo aggiunge un ruolo a un utente e a un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata che ha anche il ruolo specificato.
func (t *Controller) AddRole(token_id string, user_role string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.AddRoleMember", "TOKEN", map[string]string{"org_id": org_id, "token_id": token_id, "role": user_role})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.AddRoleMember(user_role, account_id, tokenAssetValue.Interface())
}
Parametri:
  • token_id string: l'ID del token.
  • user_role string: il nome del ruolo da aggiungere all'utente specificato. I comportamenti mintable e burnable corrispondono alle proprietà minter_role_name e burner_role_name del file di specifica. Analogamente, il ruolo notary corrisponde alla proprietà notary_role_name del file di specifica.
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di successo, un messaggio con i dettagli dell'account.
Esempio di valore restituito:
 {"msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
RemoveRole
Questo metodo rimuove un ruolo da un utente e da un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata che dispone anche del ruolo specificato.
func (t *Controller) RemoveRole(token_id string, user_role string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.RemoveRoleMember", "TOKEN", map[string]string{"org_id": org_id, "token_id": token_id, "role": user_role})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.RemoveRoleMember(user_role, account_id, tokenAssetValue.Interface())
}
Parametri:
  • token_id string: l'ID del token.
  • user_role string: il nome del ruolo da rimuovere dall'utente specificato. I comportamenti mintable e burnable corrispondono alle proprietà minter_role_name e burner_role_name del file di specifica. Analogamente, il ruolo notary corrisponde alla proprietà notary_role_name del file di specifica.
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di successo, un messaggio con i dettagli dell'account.
Esempio di valore restituito:
{"msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"}
GetAccountsByRole
Questo metodo restituisce un elenco di tutti gli ID account per un ruolo e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
func (t *Controller) GetAccountsByRole(token_id string, user_role string) (interface{}, error) {
    auth, err:= t.Ctx.Auth.CheckAuthorization("Role.GetAccountsByRole", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Role.GetAccountsByRole(token_id, user_role)
}
Parametri:
  • token_id string: l'ID del token.
  • user_role string: il nome del ruolo da cercare.
Restituisce:
  • Una volta completato, un array JSON di ID account.
Esempio di valore restituito:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetAccountsByUser
Questo metodo restituisce un elenco di tutti gli ID account per un ID organizzazione e un ID utente specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o dal Account Owner specificato nei parametri.
func (t *Controller) GetAccountsByUser(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountsByUser", "TOKEN", map[string]string{"org_id": org_id, "user_id": user_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAccountsByUser(org_id, user_id)
}
Parametri:
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Una volta completato, un array JSON di ID account.
Esempio di valore restituito:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetUsersByRole
Questo metodo restituisce un elenco di tutti gli utenti per un ruolo e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o dal Account Owner specificato nei parametri.
func (t *Controller) GetUsersByRole(token_id string, user_role string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetUsersByRole", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetUsersByRole(token_id, user_role)
}
Parametri:
  • token_id string: l'ID del token.
  • user_role string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, un array JSON degli oggetti utente (org_id e user_id).
Esempio di valore restituito:
{"Users":[{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}]}
IsInRole
Questo metodo restituisce un valore booleano per indicare se un utente e un token hanno un ruolo specificato. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account.
func (t *Controller) IsInRole(token_id string, org_id string, user_id string, user_role string) (interface{}, error) {
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.IsInRole", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      result, err := t.Ctx.Token.IsInRole(user_role, account_id, tokenAssetValue.Interface())
      if err != nil {
            return nil, fmt.Errorf("error in IsInRole %s", err.Error())
      }
      response := make(map[string]interface{})
      response["result"] = result
      return response, nil
}
Parametri:
  • token_id string: l'ID del token.
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
  • user_role string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON del risultato booleano.
Esempio di valore restituito:
{"result":false}
GetOrgUsersByRole
Questo metodo restituisce informazioni su tutti gli utenti con un ruolo specificato in un'organizzazione specificata. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
func (t *Controller) GetOrgUsersByRole(token_id string, user_role string, org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetOrgUsersByRole", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetOrgUsersByRole(token_id, user_role, org_id)
}
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da controllare.
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli utenti con il ruolo specificato nell'organizzazione specificata.
Esempio di valore restituito:
{
    "Users": [
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "admin"
        },
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "orgAdmin"
        }
    ]
}
GetOrgAccountsByRole
Questo metodo restituisce informazioni su tutti i conti con un ruolo specificato in un'organizzazione specificata. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
func (t *Controller) GetOrgAccountsByRole(token_id string, user_role string, org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetOrgAccountsByRole", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetOrgAccountsByRole(token_id, user_role, org_id)
}
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da controllare.
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti i clienti con il ruolo specificato nell'organizzazione specificata.
Esempio di valore restituito:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
         "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}

Metodi per gestione cronologia transazioni

GetAccountTransactionHistory
Questo metodo restituisce un array di dettagli della cronologia delle transazioni conto per un utente e un token specificati. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account.
func (t *Controller) GetAccountTransactionHistory(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistory", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }

      transactionArray, err := t.Ctx.Account.GetAccountTransactionHistory(account_id, org_id, user_id)
      return transactionArray, err
}
Parametri:
  • token_id string: l'ID del token.
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un array di oggetti transazione account JSON che include le proprietà riportate di seguito.
  • balance – Il saldo del conto.
  • holding_id – L'ID di un conto di deposito.
  • onhold_balance – Il saldo in sospeso.
  • timestamp – Il tempo della transazione.
  • token_id: l'ID del token.
  • transacted_account – Il conto con cui è avvenuta la transazione.
  • transacted_amount: l'importo della transazione.
  • transaction_id: l'ID della transazione.
  • transaction_type: tipo di transazione.
Esempio di valore restituito:
[{
    "balance": 199,
    "onhold_balance": 0,
    "timestamp": "2021-08-16T17:42:32.905+05:30",
    "token_id": "digiCurr101",
    "transacted_account": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "transacted_amount": 1,
    "transaction_id": "otransaction~c8a9fa001aba6e0d8391b034655889df47eb5103713840b999a4ab41f5e57b38",
    "transaction_type": "DEBIT"
}, {
    "balance": 200,
    "onhold_balance": 0,
    "timestamp": "2021-08-16T17:41:59.262+05:30",
    "token_id": "digiCurr101",
    "transacted_account": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "transacted_amount": 100,
    "transaction_id": "otransaction~65a0bf8ae8108baa7495fbab91c205651c055e9f480f6808753287173026aa69",
    "transaction_type": "MINT"
}]
GetAccountTransactionHistoryWithFilters
Questo metodo restituisce un array di dettagli della cronologia delle transazioni conto per un utente e un token specificati. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account. Questo metodo può essere chiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
func (t *Controller) GetAccountTransactionHistoryWithFilters(token_id string, org_id string, user_id string, filters ...account.AccountHistoryFilters) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistoryWithFilters", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }

      // sample format of filter: []string{"3", "", "2022-01-16T15:16:36+00:00", "2022-01-17T15:16:36+00:00"}
      transactionArray, err := t.Ctx.Account.GetAccountTransactionHistoryWithFilters(account_id, org_id, user_id, filters...)
      return transactionArray, err
}
Parametri:
  • token_id string: l'ID del token.
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
  • filters: string: parametro facoltativo. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione di pagina predefinita è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, consultare la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate nel formato RFC-3339.
Esempio:

ochain invoke GetAccountTransactionHistoryWithFilters 'token1' 'appbuilder12' 'user_minter' '{"PageSize":10,"Bookmark":"1","StartTime":"2022-01-25T17:41:42Z","EndTime":"2022-01-25T17:59:10Z"}'

[
  {
    "transaction_id": "otransaction~3f9c306b0ef6994885939c1a6eb5f063b06617ecb932d4a043f323ba53d55f9f",
    "transacted_amount": 200,
    "timestamp": "2022-02-15T18:27:13.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa324
1abd3598e05d05",
    "transaction_type": "DEBIT",
    "balance": 9200,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~f1d37c3abd5c85c0a399f246d8eb68257c49ab4fe4cdfd3501908583c51c421e",
    "transacted_amount": 200,
    "timestamp": "2022-02-15T18:27:02.000Z",
    "token_id": "token1",
    "transaction_type": "BULKTRANSFER",
    "number_of_sub_transactions": 2,
    "balance": 9600,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b",
    "transacted_amount": 200,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transaction_type": "BULKTRANSFER",
    "number_of_sub_transactions": 2,
    "balance": 9800,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~07331a1f7be99d6750973674a783da9ec9ca17df23747cdf52d388865d93f9a",
    "transacted_amount": 10000,
    "timestamp": "2022-02-15T18:26:30.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~88b62f329f20fffc6fc9231cb51019a5e9550c78b657123d140897
62397d2b55",
    "transaction_type": "MINT",
    "balance": 10000,
    "onhold_balance": 0
  }
]
GetSubTransactionsById
Questo metodo restituisce un array di dettagli della cronologia delle transazioni secondarie per una transazione specificata.
func (t *Controller) GetSubTransactionsById(transaction_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetSubTransactionsById", "TOKEN", map[string]string{"transaction_id": transaction_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetSubTransactionsById(transaction_id)
}
Parametri:
  • transaction_id string: l'ID della transazione.
Esempio:

ochain invoke GetAccountSubTransactionHistory 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c4ca4238a0b923820dcc509a6f75849b",
    "transacted_amount": 100,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~6600eb38d365552b76f41d4186acece104f31eae331a440f963e6fa75b62ff21",
    "transaction_type": "DEBIT",
    "balance": 9900,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c81e728d9d4c2f636f067f89cc14862c",
    "transacted_amount": 100,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa3241abd3598e05d05",
    "transaction_type": "DEBIT",
    "balance": 9800,
    "onhold_balance": 0
  }
]
GetSubTransactionsByIdWithFilters
Questo metodo restituisce un array di dettagli della cronologia delle transazioni secondarie per una transazione specificata.
func (t *Controller) GetSubTransactionsByIdWithFilters(transaction_id string, filters ...account.SubTransactionFilters) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetSubTransactionsByIdWithFilters", "TOKEN", map[string]string{"transaction_id": transaction_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetSubTransactionsByIdWithFilters(transaction_id, filters...)
}
Parametri:
  • transaction_id string: l'ID della transazione.
  • filters: string: parametro facoltativo. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione di pagina predefinita è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, consultare la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate nel formato RFC-3339.
Esempio:

ochain invoke GetAccountSubTransactionHistoryWithFilters 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b' '{"PageSize":10,"Bookmark":"1"}'

[
{
"transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c4ca4238a0b923820dcc509a6f75849b",
"transacted_amount": 100,
"timestamp": "2022-02-15T18:26:57.000Z",
"token_id": "token1",
"transacted_account": "oaccount~obptok~6600eb38d365552b76f41d4186acece104f31eae331a440f963e6fa75b62ff21",
"transaction_type": "DEBIT",
"balance": 9900,
"onhold_balance": 0
},
{
"transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c81e728d9d4c2f636f067f89cc14862c",
"transacted_amount": 100,
"timestamp": "2022-02-15T18:26:57.000Z",
"token_id": "token1",
"transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa3241abd3598e05d05",
"transaction_type": "DEBIT",
"balance": 9800,
"onhold_balance": 0
}
]
GetTransactionById
Questo metodo restituisce la cronologia di un asset Transaction.
func (t *Controller) GetTransactionById(transaction_id string) (interface{}, error) {
    return t.Ctx.Transaction.GetTransactionById(transaction_id)
}
Parametri:
  • transaction_id string: l'ID dell'asset transazione.
Restituisce:
  • Una volta completata la transazione, un array JSON della cronologia.
Esempio di valore restituito:
{
    "history": [
        {
            "IsDelete": "false",
            "Timestamp": "2021-08-16 20:19:05.028 +0530 IST",
            "TxId": "67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
            "Value": {
                "Amount": 3,
                "AssetType": "otransaction",
                "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "HoldingId": "ohold~digicur~digiCurr101~op2",
                "NumberOfSubTransactions": 0,
                "Timestamp": "2021-08-16T20:19:05+05:30",
                "ToAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "TokenId": "digiCurr101",
                "TransactionId": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
                "TransactionType": "RELEASEHOLD"
            }
        }
    ],
    "transaction_id": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220"
}
DeleteHistoricalTransactions
Questo metodo elimina le transazioni meno recenti dal database di stato.
func (t *Controller) DeleteHistoricalTransactions(timestamp string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Transaction.DeleteHistoricalTransactions", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Transaction.DeleteHistoricalTransactions(timestamp)
}
Parametri:
  • timestamp string: indicatore orario che indica quando eliminare le transazioni. I cespiti transazione precedenti all'ora specificata verranno eliminati.

Metodi per la gestione del comportamento dei token - Comportamento minimo

IssueTokens
Questo metodo estrae i token, che sono quindi di proprietà del chiamante del metodo. Il chiamante deve avere un account e il ruolo minore. Il numero di token che è possibile coniare è limitato dalla proprietà max_mint_quantity del comportamento mintable nel file di specifica. Se la proprietà max_mint_quantity non viene specificata, è possibile coniare un numero illimitato di token. La quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica. Questo metodo può essere chiamato solo dal AccountOwner dell'account con il ruolo minore.
func (t *Controller) IssueTokens(token_id string, quantity float64) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.Mint(quantity, tokenAssetValue.Interface())
}
Parametri:
  • token_id string: l'ID del token.
  • quantity float64: il numero di token da identificare.
Restituisce:
  • In caso di successo, un messaggio con i dettagli dell'account.
Esempio di valore restituito:
{"msg":"Successfully minted 100 tokens to account oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetTotalMintedTokens
Questo metodo restituisce il numero totale di token coniati per un token specificato. Questo metodo può essere chiamato solo da un Token Admin o Org Admin del codice concatenato.
func (t *Controller) GetTotalMintedTokens(token_id string) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTotalMintedTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.GetTotalMintedTokens(tokenAssetValue.Interface())
}
Parametri:
  • token_id string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che indica il numero totale di token.
Esempio di valore restituito:
{"msg":"total minted amount for token with id digiCurr101 is 1000","quantity":1000}
GetNetTokens
Questo metodo restituisce il numero netto totale di token disponibili nel sistema per un token specificato. Il totale token netto è la quantità di token rimanenti dopo la masterizzazione dei token. In forma di equazione token netti = token coniati totali - token bruciati totali. Se non vengono bruciati token, il numero di token netti è uguale al totale dei token coniati. Questo metodo può essere chiamato solo da un Token Admin o Org Admin del codice concatenato.
func (t *Controller) GetNetTokens(token_id string) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetNetTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.GetNetTokens(tokenAssetValue.Interface())
}
Parametri:
  • token_id string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che indica il numero netto di token.
Esempio di valore restituito:
{"msg":"net minted amount for token with id digiCurr101 is 1000","quantity":1000}

Metodi per la gestione del comportamento dei token - comportamento trasferibile

TransferTokens
Questo metodo trasferisce i token dal chiamante a un account specificato. Il chiamante del metodo deve avere un account. La quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica. Questo metodo può essere chiamato solo dal AccountOwner dell'account.
func (t *Controller) TransferTokens(token_id string, to_org_id string, to_user_id string, quantity float64) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    to_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, to_org_id, to_user_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.Transfer(to_account_id, quantity, tokenAssetValue.Interface())
}
Parametri:
  • token_id string: l'ID del token.
  • to_org_id string - L'ID MSP (Membership Service Provider) del destinatario nell'organizzazione corrente.
  • to_user_id string: il nome utente o l'ID e-mail del destinatario.
  • quantity float64: il numero di token da trasferire.
Restituisce:
  • In caso di operazione riuscita, un messaggio con dettagli per entrambi gli account.
Esempio di valore restituito:
{"msg":"successfully transferred 1 tokens from account oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) to account oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : admin)"}
BulkTransferTokens
Questo metodo viene utilizzato per eseguire il trasferimento di massa dei token dall'account chiamante agli account specificati nell'oggetto flow. Le quantità devono essere comprese nei valori decimali specificati dal parametro decimal del comportamento divisible nel chiamante specifica file.The di questo metodo devono avere un conto già creato. Questo metodo può essere chiamato solo dal AccountOwner dell'account.
func (t *Controller) BulkTransferTokens(token_id string, flow[]map[string]interface{}) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.BulkTransfer(flow, tokenAssetValue.Interface())
}
Parametri:
  • token_id string: l'ID del token.
  • flow[]map[string]interface{}: array di oggetti JSON che specificano i dettagli e le quantità del ricevente.
    • to_org_id string - L'ID MSP (Membership Service Provider) del destinatario nell'organizzazione corrente.
    • to_user_id string: il nome utente o l'ID e-mail del destinatario.
    • quantity float64: il numero di token da trasferire.
    Ad esempio:
    [{
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user1",
    	"quantity": 10
    }, {
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user2",
    	"quantity": 10
    }]
Restituisce:
  • Messaggio che indica successo.
Esempio di valore restituito:
{
    "from_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "msg": "Successfully transferred 2 tokens from Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)",
    "sub_transactions": [
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e"
        },
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df"
        }
    ]
}

Metodi per la gestione del comportamento dei token - comportamento bloccabile

HoldTokens
Questo metodo crea un blocco per conto del proprietario dei token con l'account to_account_id. Viene specificato un conto notarile, che è responsabile del completamento o del rilascio del blocco. Quando viene creato il blocco, il saldo del token specificato dal responsabile pagamento viene bloccato. Impossibile trasferire un saldo bloccato finché il blocco non viene completato o rilasciato. Per il chiamante di questo metodo deve essere già stato creato un account. Questo metodo può essere chiamato solo dal AccountOwner dell'account.
func (t *Controller) HoldTokens(token_id string, operation_id string, to_org_id string, to_user_id string, notary_org_id string, notary_user_id string, quantity float64, TimeToExpiration string) (interface{}, error) {
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      notary_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, notary_org_id, notary_user_id)
      if err != nil {
            return nil, fmt.Errorf("error in getting notary account id from org_id: %s and user_id: %s with token_id: %s, error %s ", notary_org_id, notary_user_id, token_id, err.Error())
      }
      to_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, to_org_id, to_user_id)
      if err != nil {
            return nil, fmt.Errorf("error in getting to_account id from org_id: %s and user_id: %s with token_id: %s, error %s ", to_org_id, to_user_id, token_id, err.Error())
      }
      return t.Ctx.Token.Hold(operation_id, to_account_id, notary_account_id, quantity, TimeToExpiration, tokenAssetValue.Interface())
}
Parametri:
  • token_id string: l'ID del token.
  • operation_id string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • to_org_id string - L'ID MSP (Membership Service Provider) del destinatario nell'organizzazione corrente.
  • to_user_id string: il nome utente o l'ID e-mail del destinatario.
  • notary_org_id string – L'ID MSP (Membership Service Provider) del notaio nell'organizzazione corrente.
  • notary_user_id string – Il nome utente o l'ID e-mail del notaio.
  • quantity float64: il numero di token da mettere in attesa.
  • time_to_expiration: l'ora di scadenza del blocco. Specificare 0 per un blocco permanente. In alternativa utilizzare il formato RFC-3339. Ad esempio, 2021-06-02T12:46:06Z.
Restituisce:
  • In caso di successo, un messaggio con l'account del chiamante e i dettagli del blocco.
Esempio di valore restituito:
{"msg":"AccountId oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) is successfully holding 2 tokens"}
ExecuteHoldTokens
Questo metodo completa il blocco di un token. Una quantità di token precedentemente detenuti da un proprietario di token viene trasferita a un ricevente. Se il valore quantity è inferiore al valore di blocco effettivo, l'importo rimanente sarà nuovamente disponibile per il proprietario originale dei token. Questo metodo può essere richiamato solo dall'ID AccountOwner con il ruolo notary. La presa può essere completata solo dal notaio.
func (t *Controller) ExecuteHoldTokens(token_id string, operation_id string, quantity float64) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.ExecuteHold(operation_id, quantity, tokenAssetValue.Interface())
}
Parametri:
  • token_id string: l'ID del token.
  • operation_id string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • quantity float64: il numero di token in sospeso da trasferire.
Restituisce:
  • In caso di operazione riuscita, un messaggio con l'ID conto del chiamante e la quantità della transazione.
Esempio di valore restituito:
{"msg":"Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) has successfully executed '1' tokens(digiCurr101) from the hold with Operation Id 'op1'"}
ReleaseHoldTokens
Questo metodo rilascia un blocco sui token. Il trasferimento non è stato completato e tutti i token bloccati sono di nuovo disponibili per il proprietario originale. Questo metodo può essere richiamato dall'ID Account Owner con il ruolo notary entro il limite di tempo specificato o dal responsabile pagamento, dal beneficiario o dal notaio dopo il limite di tempo specificato.
func (t *Controller) ReleaseHoldTokens(token_id string, operation_id string) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.ReleaseHold(operation_id, tokenAssetValue.Interface())
}
Parametri:
  • token_id string: l'ID del token.
  • operation_id string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di esito positivo, viene visualizzato un messaggio che indica che il blocco è stato rilasciato.
Esempio di valore restituito:
{"msg":"Successfully released '3' tokens from Operation Id 'op2' to Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetOnHoldIds
Questo metodo restituisce un elenco di tutti gli ID azienda per un conto specificato. Questo metodo può essere chiamato dal Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il Account Owner dell'account.
func (t *Controller) GetOnHoldIds(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetOnHoldIds", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetOnHoldIDs(account_id)
}
Parametri:
  • token_id string: l'ID del token.
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Una volta completato, un elenco JSON di ID in sospeso. Un ID holding è una concatenazione del tipo di asset ohold, del nome del token, dell'ID token e dell'ID operazione.
Esempio di valore restituito:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationId
Questo metodo restituisce i dettagli della transazione in sospeso per un ID operazione e un token specificati. Questo metodo può essere invocato da chiunque.
func (t *Controller) GetOnHoldDetailsWithOperationId(token_id string, operation_id string) (interface{} error) {
    return t.Ctx.Hold.GetOnHoldDetailsWithOperationId(token_id, operation_id)
}
Parametri:
  • token_id string: l'ID del token.
  • operation_id string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON contiene le proprietà riportate di seguito.
  • HoldingId – L'ID di deposito della transazione.
  • OperationId: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • FromAccountId: l'ID account del proprietario corrente dei token in sospeso.
  • ToAccountId: l'ID del conto del destinatario.
  • NotaryAccountId – L'ID account del notaio.
  • TokenId: l'ID del token salvato.
  • Quantity: la quantità di token in sospeso per l'ID holding.
  • TimeToExpiration: la durata fino alla scadenza del blocco.
Esempio di valore restituito:
{
    "AssetType": "ohold",
    "HoldingId": "ohold~digicur~digiCurr101~op1",
    "OperationId": "op1",
    "TokenName": "digicur",
    "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "ToAccountId": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "NotaryAccountId": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "TokenId": "digiCurr101",
    "Quantity": 2,
    "TimeToExpiration": "0"
}
GetOnHoldBalanceWithOperationId
Questo metodo restituisce il saldo in sospeso per un ID operazione e un token specificati. Questo metodo può essere invocato da chiunque.
func (t *Controller) GetOnHoldBalanceWithOperationId(token_id string, operation_id string) (interface{} error) {
    return t.Ctx.Hold.GetOnHoldBalanceWithOperationId(token_id, operation_id)
}
Parametri:
  • token_id string: l'ID del token.
  • operation_id string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che indica il saldo del blocco.
Esempio di valore restituito:
{
	"holding_balance": 10,
	"msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}

Metodi per la gestione del comportamento dei token - comportamento masterizzabile

BurnTokens
Questo metodo disattiva o brucia i token dall'account del chiamante della transazione. Il chiamante di questo metodo deve avere un account e il ruolo di bruciatore. La quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica. Questo metodo può essere chiamato dal Account Owner dell'account con il ruolo di masterizzatore.
func (t *Controller) BurnTokens(token_id string, quantity float64) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.Burn(quantity, tokenAssetValue.Interface())
}
Parametri:
  • token_id string: l'ID del token.
  • quantity float64: il numero di token da masterizzare.
Restituisce:
  • Al successo, un messaggio di successo con la quantità di token bruciati e l'ID account.
Esempio di valore restituito:
{"msg":"Successfully burned 1 tokens from account id: oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e (org_id : Org1MSP, user_id : user2)"}

Metodi personalizzati

È possibile utilizzare i metodi SDK token per scrivere metodi personalizzati per l'applicazione business.

Assicurarsi di tenere traccia del valore restituito quando si utilizzano i metodi SDK token. Inoltre, per evitare la doppia spesa, non combinare più funzioni asincrone che operano sulle stesse coppie chiave-valore nel database di stato. Utilizzare invece il metodo BulkTransferTokens per effettuare più trasferimenti in un unico metodo.

L'esempio seguente mostra come utilizzare i metodi SDK token nei metodi personalizzati. Quando viene chiamato il metodo BuyTicket, trasferisce 20 token dall'account del chiamante all'account del venditore e restituisce il messaggio di transazione del trasferimento.

func (t *Controller) BuyTicket(TokenId string, SellerOrgId string, SellerUserId string) (interface{}, error){
	token, err := t.Ctx.Token.Get(TokenId)
	if err != nil {
		return nil, err
	}
	
	/**
	* The following method t.Ctx.Account.GenerateAccountId(TokenId, SellerOrgId, SellerUserId) generates account id of the seller
	*/
	sellerAccountId, err := t.Ctx.Account.GenerateAccountId(TokenId, SellerOrgId, SellerUserId)
    if err != nil {
		return nil, err
	}   

	/**
	* The following method t.Ctx.Token.Transfer(sellerAccountId, 20, token) transfers the quantity 20 from caller's
	* account & to seller's account.
	*/
    transaction, err := t.Ctx.Token.Transfer(sellerAccountId, 20, token)
    if err != nil {
		return nil, err
	}
    return transaction, nil
}

Metodi SDK token

Metodi per la gestione del controllo degli accessi

L'SDK token fornisce una funzione di controllo dell'accesso. Alcuni metodi possono essere richiamati solo da Token Admin, Org Admin o AccountOwner del token. È possibile utilizzare questa funzione per garantire che le operazioni vengano eseguite solo dagli utenti destinatari. Qualsiasi accesso non autorizzato comporta un errore. Per utilizzare la funzione di controllo dell'accesso, importare la classe Authorization dal modulo ../lib/auth.
import { Authorization } from '../lib/auth';
AddAdmin
Questo metodo aggiunge un utente come Token Admin del codice concatenato del token.
Ctx.AddAdmin(org_id string, user_id string) (interface{}, error)
Parametri:
  • user_id: il nome utente o l'ID e-mail dell'utente.
  • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Restituisce:
  • In caso di operazione riuscita, un messaggio di operazione riuscita e i dettagli per l'utente Token Admin aggiunto. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{"msg":"Successfully added Admin (Org_Id: Org1MSP, User_Id: user2)"}
RemoveAdmin
Questo metodo rimuove un utente come Token Admin del codice concatenato del token.
Ctx.RemoveAdmin(org_id string, user_id string) (interface{}, error)
Parametri:
  • user_id: il nome utente o l'ID e-mail dell'utente.
  • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Restituisce:
  • In caso di operazione riuscita, un messaggio di operazione riuscita e i dettagli per l'utente Token Admin rimosso. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
GetAllAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono Token Admin del codice concatenato del token.
Ctx.GetAllAdmins() (interface{}, error)
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli utenti che sono un Token Admin del codice concatenato token. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]
GetAllAdminUsers
Questo metodo restituisce un elenco di tutti gli utenti che sono Token Admin del codice concatenato del token.
Ctx.Admin.GetAllAdminUsers() (interface{}, error) 
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli utenti che sono un Token Admin del codice concatenato token nel modulo map[string]interface{}. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]}
CheckAuthorization
Utilizzare questo metodo per aggiungere il controllo dell'accesso al codice concatenato. Molti dei metodi token generati automaticamente utilizzano il controllo dell'accesso. La mappatura tra il ricevitore SDK e i metodi con controllo dell'accesso è descritta nel file oChainUtil.go. Per utilizzare il proprio controllo dell'accesso o disabilitare il controllo dell'accesso, rimuovere il codice di controllo dell'accesso dai metodi del controller generati automaticamente e dai metodi personalizzati.
var t TokenAccess
      var r RoleAccess
      var a AccountAccess
      var as AccountStatusAccess
      var h HoldAccess
      var ad AdminAccess
      var trx TransactionAccess
      var tc TokenConversionAccess
      var auth AuthAccess

      auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"}

      trx.DeleteHistoricalTransactions = []string{"Admin"}
      ad.AddAdmin = []string{"Admin"}
      ad.RemoveAdmin = []string{"Admin"}
      ad.GetAllAdmins = []string{"Admin", "OrgAdmin"}
      ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"}
      ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"}
      t.Save = []string{"Admin"}
      t.GetAllTokens = []string{"Admin", "OrgAdmin"}
      t.Update = []string{"Admin"}
      t.GetTokenDecimals = []string{"Admin", "OrgAdmin"}
      t.GetTokensByName = []string{"Admin", "OrgAdmin"}
      t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"}
      t.GetNetTokens = []string{"Admin", "OrgAdmin"}
      t.Get = []string{"Admin", "OrgAdmin"}
      t.GetTokenHistory = []string{"Admin", "OrgAdmin"}
      a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"}
      a.GetAllAccounts = []string{"Admin"}
      a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.History = []string{"Admin", "AccountOwner"}
      a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"}
      a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"}
      a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"}

      as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"}

      r.GetAccountsByRole = []string{"Admin"}
      r.GetUsersByRole = []string{"Admin"}
      r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"}
      r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"}

      tc.InitializeExchangePoolUser = []string{"Admin"}
      tc.AddConversionRate = []string{"Admin"}
      tc.UpdateConversionRate = []string{"Admin"}
      tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.TokenConversion = []string{"Admin", "AnyAccountOwner"}
      tc.GetExchangePoolUser = []string{"Admin"}
Ctx.Auth.CheckAuthorization(classFuncName string, args ...string) (bool, error)
Parametri:
  • classFuncName string: il valore della mappa tra i ricevitori e i metodi descritti nel file oChainUtil.go.
  • args: argomento di variabile in cui args[0] è la costante TOKEN e args[1] è l'argomento account_id, se necessario.
Restituisce:
  • Una risposta booleana e un messaggio di errore se si verifica un errore.
IsUserTokenAdmin
Questo metodo restituisce il valore booleano true se il chiamante della funzione è un valore Token Admin. Altrimenti, il metodo restituisce false.
Ctx.Auth.IsUserTokenAdmin()  (bool, error)
Parametri:
  • user_id: il nome utente o l'ID e-mail dell'utente.
  • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Restituisce:
  • Una risposta booleana e un messaggio di errore se si verifica un errore.
Esempio di valore restituito:
{"result":false}
AddOrgAdmin
Questo metodo aggiunge un utente come Org Admin dell'organizzazione.
Ctx.Admin.AddOrgAdmin(org_id, user_id) (interface{}, error)
Parametri:
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
Questo metodo rimuove un utente come Org Admin di un'organizzazione.
Ctx.Admin.RemoveOrgAdmin(org_id, user_id) (interface{}, error)
Parametri:
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
    "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
GetOrgAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono un Org Admin di un'organizzazione.
Ctx.Admin.GetAllOrgAdmins() (interface{}, error)
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, una lista JSON che include oggetti OrgId e UserId.
Esempio di valore restituito:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}

Metodi per la gestione della configurazione token

GetTokenDecimals
Questo metodo restituisce il numero di posizioni decimali disponibili per un token frazionario. Se il comportamento divisible non è specificato, il valore predefinito è 0.
Ctx.Token.GetTokenDecimals(token_id string) (int, error)
Parametri:
  • nessuno
Restituisce:
  • In caso di esito positivo, le posizioni decimali del token, nel tipo di dati numerico. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
1
GetAllTokens
Questo metodo restituisce tutti gli asset token salvati nel database di stato. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
Ctx.Token.GetAllTokens()  (interface{}, error)
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un array di una mappa di tutti gli asset token. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetTokensByName
Questo metodo restituisce tutti gli asset token con il nome specificato. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
Ctx.Token.GetTokensByName(token_name string) (interface{}, error)
Parametri:
  • token_name string – Il nome del token, che corrisponde alla proprietà Token_name del modello. Il valore è il nome della classe del token.
Restituisce:
  • Restituisce un array di una mappa di tutti gli asset token del nome specificato.
Esempio di valore restituito:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "key": "obp2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "",
            "Token_id": "obp2",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
Get
Questo metodo restituisce un oggetto token se è presente nel database di stato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato del token.
Ctx.Get(Id string, result ...interface{}) (interface{}, error)
Parametri:
  • token_id: string: l'ID del token da restituire.
  • result: argomento di variabile, in cui il primo argomento result[0] è un riferimento a un oggetto Token vuoto del tipo richiesto.
Restituisce:
  • In caso di operazione riuscita, una mappa con i dati dell'asset token. L'argomento variabile result[0] contiene i dati del token. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "holdable", "roles"],
    "Roles": {
        "burner_role_name": "burner",
        "minter_role_name": "minter",
        "notary_role_name": "notary"
    },
    "Mintable": {
        "Max_mint_quantity": 20000
    },
    "Divisible": {
        "Decimal": 1
    },
    "Token_to_currency_ratio": 1,
    "Currency_representation": "DOLLAR"
}
IsTokenType
Questo metodo verifica se esiste un asset token per un ID token specificato.
Ctx.Model.IsTokenType(token_id: string) error
Parametri:
  • token_id: string: l'ID del token da controllare.
Restituisce:
  • Se esiste un asset token con l'ID specificato, si verifica un errore nullo. Altrimenti, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
nil
Save
Questo metodo crea un token e ne salva le proprietà nel database di stato.
Ctx.Token.Save(args ...interface{}) (interface{}, error)
Parametri:
  • token_id: string: l'ID del token da restituire.
  • args: argomento di variabile, in cui il primo argomento args[0] è un riferimento ai dati del token struct del tipo richiesto da aggiungere al libro contabile.
Restituisce:
  • In caso di operazione riuscita, un oggetto interface{} con dettagli sul token salvato nel database di stato. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
Update
Questo metodo aggiorna le proprietà del token. Dopo aver creato un asset token, è possibile aggiornare solo il valore token_desc e le relative proprietà personalizzate.
Ctx.Token.Update(args ...interface{}) (interface{}, error)
Parametri:
  • Asset contenente un riferimento ai dati del token struct di tipo obbligatorio da aggiornare nel libro contabile.
Restituisce:
  • In caso di operazione riuscita, un messaggio promessa con dettagli token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetByRange
Questo metodo chiama internamente il metodo fabric getStateByRange. Anche se qualsiasi cespite con l'ID specificato viene restituito dal libro contabile, questo metodo inserisce il cespite nel tipo di cespite chiamante.
Ctx.Token.GetByRange(startId string, endId string, asset ...interface{}) ([]map[string]interface{}, error)
Parametri:
  • startId: string: la chiave di partenza dell'intervallo. Questa chiave è inclusa nell'intervallo.
  • endId: string: la chiave finale dell'intervallo. Questa chiave è esclusa dall'intervallo.
  • asset[0]: slice vuota del token del tipo richiesto. Se il metodo viene eseguito correttamente, questo contiene il risultato richiesto.
Restituisce:
  • Una volta completata l'operazione, una porzione di mappe contenente i dettagli dell'asset token per i token in cui il valore token_id si trova nell'intervallo specificato. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
[{
    "Key": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
    "Record": {
        "AccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "AssetType": "oaccount",
        "Balance": 99,
        "BalanceOnHold": 1,
        "BapAccountVersion": 0,
        "OrgId": "Org1MSP",
        "TokenId": "t1",
        "TokenName": "loyaltok123",
        "UserId": "u1"
    }
}, {
    "Key": "oaccount~loyaltok123~ac30c5ca924a2c7def61acf596d91e0cca70bc8cd233179df4efb2791b56336b",
    "Record": {
        "AccountId": "oaccount~loyaltok123~ac30c5ca924a2c7def61acf596d91e0cca70bc8cd233179df4efb2791b56336b",
        "AssetType": "oaccount",
        "Balance": 0,
        "BalanceOnHold": 0,
        "BapAccountVersion": 0,
        "OrgId": "Org1MSP",
        "TokenId": "t1",
        "TokenName": "loyaltok123",
        "UserId": "u2"
    }
}, {
    "Key": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
    "Record": {
        "AccountId": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
        "AssetType": "oaccount",
        "Balance": 0,
        "BapAccountVersion": 0,
        "BalanceOnHold": 0,
        "OrgId": "Org1MSP",
        "TokenId": "t1",
        "TokenName": "loyaltok123",
        "UserId": "admin"
    }
}, {
    "Key": "oadmin~Org1MSP~admin",
    "Record": {
        "AssetType": "oadmin",
        "Key": "oadmin~Org1MSP~admin",
        "OrgId": "Org1MSP",
        "UserId": "admin"
    }
}, {
    "Key": "ohold~loyaltok123~t1~op1",
    "Record": {
        "AssetType": "ohold",
        "FromAccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "HoldingId": "ohold~loyaltok123~t1~op1",
        "NotaryAccountId": "oaccount~loyaltok123~ac30c5ca924a2c7def61acf596d91e0cca70bc8cd233179df4efb2791b56336b",
        "OperationId": "op1",
        "Quantity": 1,
        "TimeToExpiration": "0",
        "ToAccountId": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
        "TokenId": "t1",
        "TokenName": "loyaltok123"
    }
}, {
    "Key": "ometadata~loyaltok123~t1",
    "Record": {
        "AssetType": "ometadata",
        "Metadata_id": "ometadata~loyaltok123~t1",
        "Token_id": "t1",
        "Token_name": "loyaltok123",
        "Total_minted_amount": 100,
        "Total_supply": 100
    }
}, {
    "Key": "orole~t1~minter~oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
    "Record": {
        "AccountID": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "AssetType": "orole",
        "Key": "orole~t1~minter~oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "RoleName": "minter",
        "TokenId": "t1"
    }
}, {
    "Key": "otransaction~4a774f6493f6521cab9eda96822cb3bb4103c0738ee2dbb9a193b868ace36fa5",
    "Record": {
        "Amount": 100,
        "AssetType": "otransaction",
        "FromAccountId": "",
        "HoldingId": "",
        "NumberOfSubTransactions": 0,
        "Timestamp": "2021-08-25T23:04:42+05:30",
        "ToAccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "TokenId": "t1",
        "TransactionId": "otransaction~4a774f6493f6521cab9eda96822cb3bb4103c0738ee2dbb9a193b868ace36fa5",
        "TransactionType": "MINT"
    }
}, {
    "Key": "otransaction~69f3cefbcb64b73f01a0eadff87169f456873ccebe61ca8da3eef3f465f0c129",
    "Record": {
        "Amount": 1,
        "AssetType": "otransaction",
        "FromAccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "HoldingId": "ohold~loyaltok123~t1~op1",
        "NumberOfSubTransactions": 0,
        "Timestamp": "2021-08-25T23:06:13+05:30",
        "ToAccountId": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
        "TokenId": "t1",
        "TransactionId": "otransaction~69f3cefbcb64b73f01a0eadff87169f456873ccebe61ca8da3eef3f465f0c129",
        "TransactionType": "ONHOLD"
    }
}, {
    "Key": "t1",
    "Record": {
        "AssetType": "otoken",
        "Behavior": ["divisible", "mintable", "transferable", "burnable", "holdable", "roles"],
        "Currency_Name": "a",
        "Divisible": {
            "Decimal": 2
        },
        "Effective_From_Date": "2020-09-09T00:00:00Z",
        "Mintable": {
            "Max_mint_quantity": 10000
        },
        "Roles": {
            "minter_role_name": "minter"
        },
        "Token_To_Currency_Ratio": 1,
        "Token_desc": "",
        "Token_id": "t1",
        "Token_name": "loyaltok123",
        "Token_type": "fungible"
    }
}]
History
Questo metodo restituisce la cronologia del token per un ID token specificato.
Ctx.Token.History(tokenId string) (interface{}, error)
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, un array JSON che rappresenta la cronologia del token.
Esempio di valore restituito:
[
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:46:33Z",
        "TxId": "12333b8a4f63aa9b3a34072efcbd7df546c6d1e7d82a7a9596e899383656d6f7",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "updated description",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:04:25Z",
        "TxId": "99702e2dad7554a5ee4716a0d01d3e394cbce39bea8bade265d8911f30ebad0b",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]

Metodi per la gestione degli account

GenerateAccountId
Questo metodo restituisce un ID account, che è un set alfanumerico di caratteri, preceduto da oaccount~<token asset name>~ e seguito da un hash del nome utente o dell'ID e-mail (user_id) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza, l'ID del provider di servizi di appartenenza (org_id) dell'utente nell'organizzazione di rete corrente e l'ID token univoco (token_id).
Ctx.Account.GenerateAccountId(token_id string, org_id string, user_id string) (string, error)
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, l'ID account generato. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f
CreateAccount
Questo metodo crea un account per un utente e un token specificati. Ogni utente che ha token in qualsiasi momento deve avere un account. Gli account tengono traccia del saldo, del saldo in sospeso e della cronologia delle transazioni di un utente. Un ID account è un set alfanumerico di caratteri, preceduto da oaccount~<token asset name>~ e seguito da un hash del nome utente o dell'ID e-mail (user_id) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza, l'ID del provider di servizi di appartenenza (org_id) dell'utente nell'organizzazione di rete corrente. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato.
t.Ctx.Account.CreateAccount(org_id string, user_id string, token_type string)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
  • token_type: string: il tipo di token, che deve essere fungible.
Restituisce:
  • In caso di operazione riuscita, l'oggetto account creato. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
 "AssetType":"oaccount",
"AccountId":"oaccount~a73085a385bc96c4a45aa2dff032e7dede82c0664dee5f396b7c5854eeafd4bd",
   "UserId":"user1",
   "OrgId":"Org1MSP",
   "BapAccountVersion": 0,
   "AccountType":"fungible",
   "TokenId":"",
   "TokenName":"",
   "Balance":0,
   "BalanceOnHold":0
}
AssociateToken
Questo metodo associa un token fungibile a un account. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
t.Ctx.Account.AssociateToken(account_id, token_id)
Parametri:
  • account_id string – L'ID dell'account.
  • token_id string: l'ID del token.
Restituisce:
  • Una volta completato, un oggetto JSON dell'account aggiornato.
Esempio di valore restituito:
{ 
"AssetType":"oaccount", 
"AccountId":"oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb", 
"BapAccountVersion": 0,
"UserId":"admin", 
"OrgId":"Org1MSP", 
"AccountType":"fungible", 
"TokenId":"token1", 
"TokenName":"loyaltok", 
"Balance":0, 
"BalanceOnHold":0 
}
GetAccountWithStatus
Questo metodo restituisce i dettagli del conto per un conto specificato, incluso lo stato del conto.
Ctx.Account.GetAccountWithStatus(account_id string) (interface{}, error)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, i dettagli dell'account richiesto. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
  "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "AssetType": "oaccount",
  "Balance": 95,
  "BalanceOnHold": 0,
  "BapAccountVersion": 8,
  "OrgId": "appdev",
  "Status": "active",
  "TokenId": "obp1",
  "TokenName": "obptok",
  "TokenType": "fungible",
  "UserId": "idcqa"
}
GetAccount
Questo metodo restituisce i dettagli del conto per un conto specificato.
Ctx.Account.GetAccount(account_id string) (Account, error)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, i dettagli dell'account richiesto. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "AssetType": "oaccount",
    "BapAccountVersion": 0,
    "AccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "UserId": "user1",
    "OrgId": "Org1MSP",
    "TokenId": "digiCurr101",
    "TokenName": "digicur",
    "Balance": 0,
    "BalanceOnHold": 0
}
GetAccountHistory
Questo metodo restituisce un array dei dettagli della cronologia account per un account specificato.
Ctx.Account.History(account_id string) ([]interface{}, error)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, un array map[string]interface{} contenente i dettagli della cronologia dell'account. I dati dell'account vengono visualizzati sotto la chiave Value nella mappa. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore. Il valore restituito è uguale al metodo "GetAccountHistory".
Esempio di valore restituito:
[
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:31:15Z",
      "TxId": "adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 100,
          "BalanceOnHold": 0,
          "BapAccountVersion": 1,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:30:23Z",
      "TxId": "8fbeda2ba60ba175091faae5ae369247775f2cba45c4d6d1ead6f0b05be84743",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:29:54Z",
      "TxId": "19bb296ae71709e91b097ba5d9ebd7f7522095880382fbf5913334a46a6026aa",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "",
          "TokenName": "",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  }
]
GetAccountOnHoldBalance
Questo metodo restituisce il saldo in sospeso per un conto specificato.
Ctx.Account.getAccountOnHoldBalance(account_id: string)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, un oggetto promessa con il saldo in sospeso corrente e un messaggio di operazione riuscita. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
   "holding_balance":0,
   "msg":"Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
GetAllAccounts
Questo metodo restituisce un elenco di tutti i conti. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
Ctx.func (t *Controller) GetAllAccounts() (interface{}, error)
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un array JSON che elenca tutti gli account.
Esempio di valore restituito:
"payload": [
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 100,
            "BalanceOnHold": 0,
            "BapAccountVersion": 1,
            "OrgId": "appdev",
            "TokenId": "t1",
            "TokenName": "obptok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    }
]
GetUserByAccountId
Questo metodo restituisce i dettagli utente per un account specificato.
Ctx.Account.GetUserByAccountById(account_id string) (interface{}, error)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, una promessa con un oggetto JSON che include tre proprietà:
    • user_id: il nome utente o l'ID e-mail dell'utente.
    • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
    • token_id: l'ID del token.
  • In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
   "org_id":"Org1MSP",
   "token_id":"digiCurr101",
   "user_id":"user1"
}
GetAccountBalance
Questo metodo restituisce il saldo del conto per un conto specificato.
Ctx.GetAccountBalance(token_id string, org_id string, user_id string) (interface{}, error)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • Al termine, un'interfaccia con una stringa di messaggio e il saldo corrente. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
    "msg": "Current Balance of +p2uaMTsU9D74l9XpHQ2c55ic/2gbO4NZITC4Zq4P8E= is: 200",
    "user_balance": 200
}
GetAllOrgAccounts
Questo metodo restituisce un elenco di tutti i conti token appartenenti a un'organizzazione specificata.
Ctx.Account.GetAllOrgAccounts(org_id string) (interface{}, error)
Parametri:
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli account per l'organizzazione specificata.
Esempio di valore restituito:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    },
    {
        "key": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
        "valueJson": {
            "AccountId": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "example_minter"
        }
    }
]

Metodi per gestione ruoli

AddRoleMember
Questo metodo aggiunge un ruolo a un utente e a un token specificati.
Ctx.Token.AddRoleMember(role string, account_id string, tokenAsset interface{}) (interface{}, error)
Parametri:
  • role: string: il nome del ruolo da aggiungere all'utente specificato. I comportamenti mintable e burnable corrispondono alle proprietà minter_role_name e burner_role_name del file di specifica. Analogamente, il ruolo notary corrisponde alla proprietà notary_role_name del file di specifica.
  • account_id: number: l'ID account a cui aggiungere il ruolo.
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • Al successo, restituisce una mappa con un messaggio di successo che indica l'aggiunta del ruolo all'account. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
   "msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"
}
RemoveRoleMember
Questo metodo rimuove un ruolo da un utente e da un token specificati.
Ctx.Token.RemoveRoleMember(role string, account_id string, tokenAsset interface{}) (interface{}, error)
Parametri:
  • role: string: il nome del ruolo da rimuovere all'utente specificato. I comportamenti mintable e burnable corrispondono alle proprietà minter_role_name e burner_role_name del file di specifica. Analogamente, il ruolo notary corrisponde alla proprietà notary_role_name del file di specifica.
  • account_id: number: l'ID account da cui rimuovere il ruolo.
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, restituisce una mappa con un messaggio di operazione riuscita che indica la rimozione del ruolo dall'account. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
  "msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"
}
GetAccountsByRole
Questo metodo restituisce un elenco di tutti gli account per un ruolo e un token specificati.
Ctx.Role.GetAccountsByRole(token_id string, user_role string) (interface{}, error)
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • Una volta completato, un array JSON di ID account. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{"accounts":["oaccount~obptok~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
GetUsersByRole
Questo metodo restituisce un elenco di tutti gli utenti per un ruolo e un token specificati.
Ctx.Role.GetUsersByRole(token_id string, user_role string) (interface{}, error)
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, un array JSON di oggetti utente. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
    "Users": [
        {
            "token_id":"digiCurr101",
            "user_id": "user1",
            "org_id": "Org1MSP"
        }
    ]
}
IsInRole
Questo metodo indica se un utente e un token hanno un ruolo specificato.
Ctx.Token.IsInRole(role string, account_id string, tokenAsset interface{}) (bool, error)
Parametri:
  • role: string: il nome del ruolo da controllare.
  • account_id: number – L'ID account da controllare.
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, restituisce una mappa con un messaggio di operazione riuscita che indica la rimozione del ruolo dall'account. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
    "result": false
}
RoleCheck
Questo metodo controlla se l'ID conto fornito è membro di un ruolo qualsiasi.
Ctx.Token.RoleCheck(account_id string, tokenAsset interface{}) (bool, error)
Parametri:
  • account_id: string – L'ID account da controllare.
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • Se l'account specificato dispone di un ruolo qualsiasi, un messaggio di operazione riuscita e il valore booleano true. Altrimenti, il valore booleano false. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{ result: true }
GetOrgUsersByRole
Questo metodo restituisce informazioni su tutti gli utenti con un ruolo specificato in un'organizzazione specificata.
Ctx.Role.GetOrgUsersByRole(token_id string, user_role string, org_id string) (interface{}, error)
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da controllare.
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli utenti con il ruolo specificato nell'organizzazione specificata.
Esempio di valore restituito:
{
    "Users": [
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "admin"
        },
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "orgAdmin"
        }
    ]
}
GetOrgAccountsByRole
Questo metodo restituisce informazioni su tutti i conti con un ruolo specificato in un'organizzazione specificata.
Ctx.Role.GetOrgAccountsByRole(token_id string, user_role string, org_id string) (interface{}, error)
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da controllare.
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti i clienti con il ruolo specificato nell'organizzazione specificata.
Esempio di valore restituito:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
         "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}

Metodi per gestione cronologia transazioni

GetAccountTransactionHistory
Questo metodo restituisce un array dei dettagli della cronologia delle transazioni per un conto specificato.
Ctx.Account.GetAccountTransactionHistory(account_id string) (interface{}, error)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • Il valore restituito è uguale al metodo "GetAccountTransactionHistory".
  • In caso di operazione riuscita, un array di oggetti transazione account JSON.
  • In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
[
  {
      "NumberOfSubTransactions": 2,
      "balance": 160,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:51:48Z",
      "token_id": "t1",
      "transacted_amount": 20,
      "transaction_id": "otransaction~bd3e8d7d0bcdbed0469a2fccfe95f7ebbeb1987d8385bccf5c84bf80251e748c",
      "transaction_type": "BULKTRANSFER"
  },
  {
      "balance": 180,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:47:14Z",
      "token_id": "t1",
      "transacted_account": "oaccount~692a7465c01e36b694cb8ae86e6c6584240aa1f865fde54f95f32429eadd4097",
      "transacted_amount": 10,
      "transaction_id": "otransaction~250996f1df6a36a1b647f522efcaaf48fd70452d711c247fc4cd475b8e752b08",
      "transaction_type": "DEBIT"
  },
  {
      "balance": 190,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:47:08Z",
      "token_id": "t1",
      "transacted_account": "oaccount~bb5a0b57d895327c8a8cd1f267310cbf3ae542bc854fab8188b5083a969d72fb",
      "transacted_amount": 10,
      "transaction_id": "otransaction~664325a25ae6b19b23693c66f83811184e0a78fabb49122359a2dbf209f32976",
      "transaction_type": "DEBIT"
  },
  {
      "balance": 200,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:46:46Z",
      "token_id": "t1",
      "transacted_account": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
      "transacted_amount": 100,
      "transaction_id": "otransaction~7f49564b1eb61d4c8be0ef61cd5e635b533ca533907944e4ec500f390237fd6b",
      "transaction_type": "MINT"
  },
  {
      "balance": 100,
      "onhold_balance": 0,
      "timestamp": "2023-08-28T19:31:15Z",
      "token_id": "t1",
      "transacted_account": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
      "transacted_amount": 100,
      "transaction_id": "otransaction~adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "transaction_type": "MINT"
  }
]
GetAccountTransactionHistoryWithFilters
Questo metodo restituisce un array dei dettagli della cronologia delle transazioni per una transazione specificata. Questo metodo può essere chiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
t.Ctx.Account.GetAccountTransactionHistoryWithFilters (transaction_id: string, filters?: SubTransactionFilters)
Parametri:
  • Transaction_id: string: l'ID della transazione.
  • filters: string: parametro facoltativo. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione di pagina predefinita è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, consultare la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate nel formato RFC-3339.
Esempio:

ochain invoke GetAccountTransactionHistoryWithFilters 'token1' 'appbuilder12' 'user_minter' '{"PageSize":10,"Bookmark":"1","StartTime":"2022-01-25T17:41:42Z","EndTime":"2022-01-25T17:59:10Z"}'

[
    {
        "balance": 90,
        "onhold_balance": 0,
        "timestamp": "2022-04-20T19:43:36Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~7a4d67118e623a876b77c67e76b819269a8d4a509aece5d2263fb274a9beb3b8",
        "transacted_amount": 5,
        "transaction_id": "otransaction~dd9986d3686e52264935558e42026fbf8a9af48b06a3256a58b453f5ada4e636",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 95,
        "onhold_balance": 0,
        "timestamp": "2022-04-20T19:43:22Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~0642308fc4c514c257ebf04326c63f990e2531bfd59d0b952056094da61e04ab",
        "transacted_amount": 5,
        "transaction_id": "otransaction~5e53424de3d691cf6b2a55ea3dc478c555d8784111c11847e594194d6c2e7755",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 100,
        "onhold_balance": 0,
        "timestamp": "2022-04-20T19:42:54Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~b63935592a702d30bedb87ae97b9b1ba7d0f346716adc4f5a4192220bf410d4e",
        "transacted_amount": 100,
        "transaction_id": "otransaction~94c467825ce9f66cc69958d38b169022a69eebc66b75b7d6e0b0585af2c3c228",
        "transaction_type": "MINT"
    }
]
GetSubTransactionsById
Questo metodo restituisce un array dei dettagli della cronologia delle transazioni per una transazione specificata.
t.Ctx.Account.GetSubTransactionsById(transaction_id string)
Parametri:
  • transaction_id: string: l'ID della transazione.
Esempio:

ochain invoke GetSubTransactionsById 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
    {
        "balance": 80,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~7a4d67118e623a876b77c67e76b819269a8d4a509aece5d2263fb274a9beb3b8",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c81e728d9d4c2f636f067f89cc14862c",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 85,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~0642308fc4c514c257ebf04326c63f990e2531bfd59d0b952056094da61e04ab",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c4ca4238a0b923820dcc509a6f75849b",
        "transaction_type": "DEBIT"
    }
]
GetSubTransactionsByIdWithFilters
Questo metodo restituisce un array dei dettagli della cronologia delle transazioni per una transazione specificata.
t.Ctx.Account.GetSubTransactionsByIdWithFilters(transaction_id string, filters ...SubTransactionFilters)
Parametri:
  • transaction_id: string: l'ID della transazione.
  • filters: string: parametro facoltativo. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione di pagina predefinita è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, consultare la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate nel formato RFC-3339.
Esempio:

ochain invoke GetSubTransactionsByIdWithFilters 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b' '{"PageSize":10,"Bookmark":"1"}'

[
    {
        "balance": 80,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~7a4d67118e623a876b77c67e76b819269a8d4a509aece5d2263fb274a9beb3b8",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c81e728d9d4c2f636f067f89cc14862c",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 85,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~0642308fc4c514c257ebf04326c63f990e2531bfd59d0b952056094da61e04ab",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c4ca4238a0b923820dcc509a6f75849b",
        "transaction_type": "DEBIT"
    }
]
GetTransactionById
Questo metodo restituisce la cronologia di un asset Transaction.
t.Ctx.Transaction.GetTransactionById(transaction_id string)
Parametri:
  • transaction_id string: l'ID dell'asset transazione.
Esempio di valore restituito:
{
    "history": [
        {
            "IsDelete": "false",
            "Timestamp": "2021-08-16 20:19:05.028 +0530 IST",
            "TxId": "67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
            "Value": {
                "Amount": 3,
                "AssetType": "otransaction",
                "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "HoldingId": "ohold~digicur~digiCurr101~op2",
                "NumberOfSubTransactions": 0,
                "Timestamp": "2021-08-16T20:19:05+05:30",
                "ToAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "TokenId": "digiCurr101",
                "TransactionId": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
                "TransactionType": "RELEASEHOLD"
            }
        }
    ],
    "transaction_id": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220"
}
DeleteHistoricalTransactions
Questo metodo elimina le transazioni meno recenti dal database di stato.
func (t *Controller) DeleteHistoricalTransactions(timestamp string) (interface{}, error)
Parametri:
  • time_to_expiration: Date: indicatore orario che indica quando eliminare le transazioni. I cespiti transazione precedenti all'ora specificata verranno eliminati.
Esempio di valore restituito:
"payload": {
    "msg": "Successfuly deleted transaction older than date:2021-08-18T05:43:30Z",
    "transactions": [
        "otransaction~57d81f681aa215bb73d6c017d16be8b283d3fcb50051c85891a97d1d407fc342"
    ]
}

Metodi per la gestione del comportamento dei token - Comportamento minimo

Mint
Questo metodo estrae i token, che sono quindi di proprietà del chiamante del metodo. Il chiamante deve avere un account e il ruolo minore. Il numero di token che è possibile coniare è limitato dalla proprietà max_mint_quantity del comportamento mintable nel file di specifica. Se la proprietà max_mint_quantity non viene specificata, è possibile coniare un numero illimitato di token. La quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica. Questo metodo può essere chiamato solo dal AccountOwner dell'account con il ruolo minore.
Ctx.Token.Mint(quantity float64, tokenAsset interface{}) (interface{}, error)
Parametri:
  • quantity: number: il numero di token da identificare.
  • tokenAsset: il riferimento all'asset token da zecca.
Restituisce:
  • In caso di operazione riuscita, un messaggio di operazione riuscita. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
  "msg":"Successfully minted 1000 tokens to Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}
GetTotalMintedTokens
Questo metodo restituisce il numero totale di token generati.
Ctx.Token.GetTotalMintedTokens(tokenAsset interface{}) (map[string]interface{}, error)
Parametri:
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • In caso di successo, un messaggio di successo e una mappa del totale dei token coniati nel tipo di dati numero. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{"msg":"total minted amount for token with id digiCurr101 is 0","quantity":0}
GetNetTokens
Questo metodo restituisce la quantità netta di token disponibili nel sistema per un token specificato. I token netti sono la quantità di token rimanenti dopo che i token sono stati bruciati. In forma di equazione: token netti = token coniati totali - token bruciati totali. Se non vengono bruciati token, il numero di token netti è uguale al totale dei token coniati.
Ctx.Token.GetNetTokens(tokenAsset interface{}) (map[string]interface{}, error)
Parametri:
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, un messaggio di operazione riuscita e una mappa della quantità netta di token nel tipo di dati del numero. In caso di errore, un messaggio di errore.
Esempio di valore restituito:
{"msg":"net minted amount for token with id digiCurr101 is 0","quantity":0}
GetMaxMintQuantity
Questo metodo restituisce la quantità massima estraibile per un token. Se il comportamento di max_mint_quantity non viene specificato, il valore predefinito è 0, che consente di coniare un numero qualsiasi di token.
Ctx.Token.GetMaxMintQuantity(token_id string) (float64, error)
Parametri:
  • token_id: string: l'ID token da controllare.
Restituisce:
  • In caso di operazione riuscita, la quantità massima estraibile del token, nel tipo di dati numerico. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
20000

Metodi per la gestione del comportamento dei token - comportamento trasferibile

Transfer
Questo metodo trasferisce i token dal chiamante a un account specificato. Il chiamante del metodo deve avere un account. La quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica. Questo metodo può essere chiamato solo dal AccountOwner dell'account.
Ctx.Token.Transfer(to_account_id string, quantity float64, tokenAsset interface{}) (interface{}, error)
Parametri:
  • to_account_id: string – L'ID account per ricevere i token.
  • quantity: number: il numero totale di token da trasferire.
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, un messaggio di operazione riuscita. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore. Il valore restituito è uguale al metodo "TransferTokens".
Esempio di valore restituito:
{     "msg":"Successfully transferred 50 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP,  User-Id: admin) to account id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"
}
BulkTransfer
Questo metodo viene utilizzato per eseguire il trasferimento di massa dei token dall'account chiamante agli account specificati nell'oggetto flow. Per il chiamante di questo metodo deve essere già stato creato un account.
Ctx.Token.BulkTransfer(flow []map[string]interface{}, tokenAsset interface{}) (interface{}, error)
Parametri:
  • flow: object[]: array di oggetti JSON che specifica i dettagli e la quantità del ricevente. La quantità di trasferimento deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica. Ad esempio:
    [{
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user1",
    	"quantity": 10
    }, {
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user2",
    	"quantity": 10
    }]
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, un messaggio di operazione riuscita che include il numero di token trasferiti. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
    "from_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "msg": "Successfully transferred 2 tokens from Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)",
    "sub_transactions": [
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e"
        },
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df"
        }
    ]
}

Metodi per la gestione del comportamento dei token - comportamento bloccabile

Hold
Questo metodo crea un blocco per conto del proprietario dei token con l'account to_account_id. Viene specificato un conto notarile, che è responsabile del completamento o del rilascio del blocco. Quando viene creato il blocco, il saldo del token specificato dal responsabile pagamento viene bloccato. Impossibile trasferire un saldo bloccato finché il blocco non viene completato o rilasciato. Per il chiamante di questo metodo deve essere già stato creato un account.
Ctx.Token.Hold(operation_id string, to_account_id string, notary_account_id string, quantity float64, TimeToExpiration string, tokenAsset)) (interface{}, error)
Parametri:
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • to_account_id: string – L'ID dell'account per ricevere i token.
  • notary__account_id: string – L'ID del conto notarile.
  • quantity: number: il numero totale di token da mettere in attesa.
  • time_to_expiration: date: la durata fino alla scadenza del blocco. Specificare 0 per un blocco permanente. In alternativa utilizzare il formato RFC-3339. Ad esempio, 2021-06-02T12.
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, un messaggio di operazione riuscita. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
 "msg": "account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : user1) is successfully holding 10 tokens",
}
ExecuteHold
Questo metodo completa un blocco sui token, trasferendo la quantità specificata di token precedentemente in sospeso al ricevente. Se il valore quantity è inferiore al valore di blocco effettivo, l'importo rimanente sarà nuovamente disponibile per il proprietario originale dei token. Questo metodo può essere richiamato solo dall'ID AccountOwner con il ruolo notary.
Ctx.Token.ExecuteHold(operation_id string, quantity float64, tokenAsset interface{}) (interface{}, error)
Parametri:
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • quantity: number: il numero totale di token da mettere in attesa.
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, un messaggio di operazione riuscita. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{"msg":"Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) has successfully executed '1' tokens(digiCurr101) from the hold with Operation Id 'op1'"}
ReleaseHold
Questo metodo rilascia un blocco sui token. Il trasferimento non è stato completato e tutti i token bloccati sono di nuovo disponibili per il proprietario originale. Questo metodo può essere richiamato dall'ID Account Owner con il ruolo notary entro il limite di tempo specificato o dal responsabile pagamento, dal beneficiario o dal notaio dopo il limite di tempo specificato.
Ctx.Token.ReleaseHold(operation_id string, tokenAsset interface{}) (interface{}, error)
Parametri:
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, un messaggio di operazione riuscita. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{"msg":"Successfully released '3' tokens from Operation Id 'op2' to Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetOnHoldIds
Questo metodo restituisce un elenco di tutti gli ID di blocco per un utente e un token specificati.
Ctx.Account.GetOnHoldIDs(account_id string) (map[string]interface{}, error)
Parametri:
  • token_id: l'ID del token.
  • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
  • user_id: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON con la lista degli ID di blocco. Un ID holding è formato dalla concatenazione del tipo di asset (ohold), del nome token, dell'ID token e dell'ID operazione.
Esempio di valore restituito:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationID
Questo metodo restituisce i dettagli della transazione in sospeso per un ID operazione e un token specificati.
Ctx.Hold.GetOnHoldDetailsWithOperationID(token_id string, operation_id string) (Hold, error)
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • Il valore restituito è uguale al metodo "GetOnHoldDetailsWithOperationId".
  • In caso di operazione riuscita, un oggetto promessa che include i dettagli della transazione in sospeso per l'ID operazione e il token specificati. L'oggetto hold include le proprietà riportate di seguito.
    • holding_id – L'ID di deposito della transazione.
    • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
    • from_account_id: l'ID account del proprietario corrente dei token in sospeso.
    • to_account_id: l'ID del conto del destinatario.
    • notary_account_id – L'ID account del notaio.
    • token_id: string: l'ID del token salvato.
    • quantity: la quantità di token in sospeso per l'ID holding.
    • time_to_expiration: la durata fino alla scadenza del blocco.
  • In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
    "AssetType": "ohold",
    "HoldingId": "ohold~digicur~digiCurr101~op1",
    "OperationId": "op1",
    "TokenName": "digicur",
    "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "ToAccountId": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "NotaryAccountId": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "TokenId": "digiCurr101",
    "Quantity": 2,
    "TimeToExpiration": "0"
}
GetOnHoldBalanceWithOperationID
Questo metodo restituisce il saldo in sospeso per un ID operazione e un token specificati.
Ctx.Hold.GetOnHoldBalanceWithOperationID(token_id string, operation_id string) (map[string]interface{}, error)
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di operazione riuscita, il saldo in sospeso dell'ID operazione e del token specificati. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
    "holding_balance": 10,
    "msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}

Metodi per la gestione del comportamento dei token - comportamento masterizzabile

Burn
Questo metodo disattiva o brucia i token dall'account del chiamante della transazione. Il chiamante di questo metodo deve avere un account e il ruolo di bruciatore. La quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica.
Ctx.Token.Burn(quantity float64 , tokenAsset interface{}) (interface{}, error)
Parametri:
  • quantity: number: il numero totale di token da masterizzare.
  • tokenAsset: l'argomento tokenAsset contiene il riferimento dei dati del token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, un messaggio di operazione riuscita. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio di valore restituito:
{
 "msg":"Successfully burned 10 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}