I'm trying to call transfer 10
K tokens to account k:81df193e0d913bc87e127150efdaaee39584abbd2d0223ed8c9afb0b31cf9db2
, with transfer-create
function. However it fails and the error message is here =>
Request key: VWFFgiP3fVdMpkwh3HoRNsyJQu5r21K7BrP6IYebTrg
js/index.js:146
Transaction pending...
js/index.js:147
Transaction mined!
js/index.js:153
{
"gas": 600,
"result": {
"status": "failure",
"error": {
"callStack": [],
"type": "EvalError",
"message": "",
"info": ""
}
},
"reqKey": "VWFFgiP3fVdMpkwh3HoRNsyJQu5r21K7BrP6IYebTrg",
"logs": "QJwoDEUraWkAdNhOm6XLEl1n-VfamHTwY-I-sMfMfGQ",
"events": [
{
"params": [
"sender00",
"k:f89ef46927f506c70b6a58fd322450a936311dc6ac91f4ec3d8ef949608dbf1f",
0.00006
],
"name": "TRANSFER",
"module": {
"namespace": null,
"name": "coin"
},
"moduleHash": "rE7DU8jlQL9x_MPYuniZJf5ICBTAEHAIFQCB4blofP4"
}
],
"metaData": {
"blockTime": 1670022922909513,
"prevBlockHash": "AZ6zoGd8Bj3OhyOWtf1MpFHGUuTCF1F9bizLDe6zhnA",
"blockHash": "mwiya3qCmq6w120nxO_IXZegM8S_FREmm54CbbJQX0k",
"blockHeight": 2101
},
"continuation": null,
"txId": null
}
Javascript function call
await transferCreateKTokenAccount(
"ktoken",
"k:81df193e0d913bc87e127150efdaaee39584abbd2d0223ed8c9afb0b31cf9db2",
10)
async function transferCreateKTokenAccount(sender, newAccount, amount) {
const cmd = {
networkId: NETWORK_ID,
keyPairs: [
Object.assign(KEY_PAIR, {
clist: [
Pact.lang.mkCap(
"GAS",
"Capability to allow buying gas",
"coin.GAS",
[]
).cap,
Pact.lang.mkCap(
"Transfer",
"Capability to allow coin transfer",
"coin.TRANSFER",
[sender, newAccount, { decimal: amount }]
).cap
]
})
],
pactCode: `(free.ktoken.transfer-create "${sender}" "${newAccount}" (read-keyset "account-keyset") ${amount})`,
envData: {
"account-keyset": {
keys: [
// Drop the k:
newAccount.substr(2)
],
pred: "keys-all"
}
},
meta: {
creationTime: creationTime(),
ttl: 28000,
gasLimit: 600,
chainId: CHAIN_ID,
gasPrice: 0.0000001,
// sender: sender
sender: `sender00`
}
};
const response = await Pact.fetch.send(cmd, API_HOST);
console.log(`Request key: ${response.requestKeys[0]}`);
console.log("Transaction pending...");
const txResult = await Pact.fetch.listen(
{ listen: response.requestKeys[0] },
API_HOST
);
console.log("Transaction mined!");
console.log(JSON.stringify(txResult, null, 2));
}
await transferCreateKTokenAccount(
`ktoken`,
`k:81df193e0d913bc87e127150efdaaee39584abbd2d0223ed8c9afb0b31cf9db2`,
10)
transfer-create implementation in the pact contract is
;; ; --------------------------------------------------------------------------
;; ; Fungible-v2 Implementation
(defun transfer-create:string
( sender:string
receiver:string
receiver-guard:guard
amount:decimal )
@doc " Transfer to an account, creating it if it does not exist. "
@model [ (property (conserves-mass amount))
(property (> amount 0.0))
(property (valid-account-id sender))
(property (valid-account-id receiver))
(property (!= sender receiver)) ]
(with-capability (TRANSFER sender receiver amount)
(debit sender amount)
(credit receiver receiver-guard amount)
)
)