├── README.md ├── assets ├── eosio.token-issue.png ├── eospark-screenshot.png └── wechat_eospark_assist.jpeg ├── build.js ├── dist └── index.json ├── package.json ├── readme_zh.md └── semantics ├── enbank.e.js ├── eosio.js ├── eosio.token.js ├── higoldtokens.js ├── onedex123451.js ├── oneotc123451.js └── whaleextrust.js /README.md: -------------------------------------------------------------------------------- 1 | # EOS-Semantics 2 | > Makes your EOS contracts action data understandable, by human. 3 | 4 | ![EOSPark screenshot](./assets/eospark-screenshot.png) 5 | 6 | ## Why 7 | It's hard for the average user to understand what is going on the chain due to the complexity. 8 | 9 | Dapp developers are also often questioned by users about the meaning of the data on the chain. 10 | 11 | 12 | The emergence of EOS Semantics can make common users understand contract data and lower the threshold for common users to participate, thus improving the activity of Dapp. 13 | 14 | [EOSPark](https://eospark.com) was the first EOS explorer to come up with and implement contract semantics. 15 | 16 | At first, it was only applied to system contract and won wide praise from users. We are now opening up its semantic capabilities to further serve the vast majority of contract developers. 17 | 18 | ## How 19 | The basic principle of EOS Semantics is similar to the [Ricardian Contract](http://iang.org/papers/ricardian_contract.html), which renders the data of a contract action into a human-readable natural language through a template. 20 | 21 | In addition, EOS Semantics provides more powerful functions, such as account/contract link, code highlighting, multi-language and so on. 22 | 23 | Take EOS system contract eosio.token as example, it's contract action data is below: 24 | ```json 25 | { 26 | "data": { 27 | "quantity": "1.0000 EOS", 28 | "to": "supereospark", 29 | "memo": "Good job EOS Semantics" 30 | } 31 | } 32 | ``` 33 | 34 | The correspond needed semantic info is below: 35 | ```json 36 | { 37 | "issue": { 38 | "actionName": "Issue Token", 39 | "template": "System issued to {{memo}}" 40 | } 41 | } 42 | ``` 43 | 44 | It will be finally rendered as below: 45 | 46 | ![eosio.token::issue](./assets/eosio.token-issue.png) 47 | 48 | 49 | ## Contribution 50 | 1. Clone 51 | ``` 52 | git clone https://github.com/BlockABC/eos-semantics 53 | cd eos-semantics 54 | ``` 55 | 56 | 2. Add semantics info 57 | 58 | 2.1 Test your template info in [Playground](https://eospark.com/semantic/playground) 59 | 60 | 2.2 Create new `.js` file under `/semantics` directory named by contract's account name, and add semantic info. 61 | > For detailed semantic info see [DOC](https://github.com/BlockABC/eos-semantics#%E6%96%87%E6%A1%A3) below,or refer to existing contract semantic info [eosio](https://github.com/BlockABC/eos-semantics/blob/master/semantics/eosio.js) 62 | 63 | 2.3 Compile 64 | ``` 65 | npm run build 66 | ``` 67 | 3. Submit PR 68 | 69 | 70 | ## Doc 71 | #### actionName 72 | 73 | Readable action name 74 | 75 | #### tempalte 76 | 77 | `template` is a html template, taking a form like [Vue](https://vuejs.org) template syntax. It would be easy for you if you are familiar with Web Development. 78 | 79 | One thing to be aware of, the syntax of template is a subset of Vue's template syntax for security. 80 | 81 | ## Builtin Template Component 82 | EOS Semantics also has some builtin components to make it easier for you and we can then unify UI style. 83 | 84 | #### If 85 | `If` component will render different component based on condition. 86 | 87 | ```html 88 | Component on true 89 | ``` 90 | 91 | #### Link 92 | `Link` will render an `a` tag. 93 | ```html 94 | Some Web Page 95 | ``` 96 | 97 | #### Accounts 98 | `Accounts` will receive accounts array as prop, and render a accounts list. 99 | ```html 100 | 101 | ``` 102 | 103 | #### Account 104 | `Account` will render an 'a' tag, click which will redirect to correspond account page. 105 | ```html 106 | 107 | ``` 108 | 109 | #### Contract 110 | `Contract` will ren 111 | `Contract` will render an 'a' tag, click which will redirect to correspond contract page. 112 | ```html 113 | 114 | ``` 115 | 116 | #### Transfer 117 | `Transfer` will render transfer UI 118 | ```html 119 | 120 | ``` 121 | 122 | #### Memo 123 | `Memo` will render memo ( Commonly used in transfer. ). 124 | ```html 125 | {{memo}} 126 | ``` 127 | 128 | #### Token 129 | `Token` will render a Token, support multiple token format. 130 | 131 | ```html 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | ``` 144 | 145 | #### Highlight 146 | `Highlight` will render a highlighted json 147 | ```html 148 | 149 | ``` 150 | 151 | #### Quantity 152 | `Quantity` will render a comma-separated number. 153 | ```html 154 | 155 | ``` 156 | 157 | 158 | #### ActionInterface 159 | `ActionInterface` will render an action name. 160 | ```html 161 | 162 | ``` 163 | 164 | 165 | ## Contact 166 | For more information, please join us on telegram: [EOSPark Telegram](https://t.me/eospark) 167 | 168 | -------------------------------------------------------------------------------- /assets/eosio.token-issue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlockABC/eos-semantics/13eb34d8f4dc818e1bafb7115fd01738ca16a0c6/assets/eosio.token-issue.png -------------------------------------------------------------------------------- /assets/eospark-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlockABC/eos-semantics/13eb34d8f4dc818e1bafb7115fd01738ca16a0c6/assets/eospark-screenshot.png -------------------------------------------------------------------------------- /assets/wechat_eospark_assist.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlockABC/eos-semantics/13eb34d8f4dc818e1bafb7115fd01738ca16a0c6/assets/wechat_eospark_assist.jpeg -------------------------------------------------------------------------------- /build.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | 3 | const files = fs.readdirSync('./semantics') 4 | 5 | console.log(files) 6 | 7 | const semantics = files.reduce((reduced, file) => { 8 | const contract = file.replace(/.js$/, '') 9 | const content = require(`./semantics/${file}`) 10 | 11 | reduced[contract] = content 12 | return reduced 13 | }, {}) 14 | 15 | 16 | fs.existsSync('./dist') || fs.mkdirSync('./dist') 17 | fs.writeFileSync('./dist/index.json', JSON.stringify(semantics, null, 2), 'utf-8') 18 | -------------------------------------------------------------------------------- /dist/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "enbank.e": { 3 | "withdraw": { 4 | "en": { 5 | "actionName": "Withdraw", 6 | "template": " withdraw staked {{quantity}}" 7 | }, 8 | "zh": { 9 | "actionName": "赎回质押", 10 | "template": " 赎回了质押的 {{quantity}}" 11 | } 12 | } 13 | }, 14 | "eosio": { 15 | "newaccount": { 16 | "en": { 17 | "actionName": "Create Account", 18 | "template": " created new account " 19 | }, 20 | "zh": { 21 | "actionName": "创建账户", 22 | "template": " 创建了账户 " 23 | } 24 | }, 25 | "buyrambytes": { 26 | "en": { 27 | "actionName": "Buy RAM", 28 | "template": " bought {{bytes}} bytes RAM for " 29 | }, 30 | "zh": { 31 | "actionName": "购买内存", 32 | "template": " 购买了 {{bytes}} bytes内存" 33 | } 34 | }, 35 | "buyram": { 36 | "en": { 37 | "actionName": "Buy RAM", 38 | "template": " bought {{quant}} RAM for " 39 | }, 40 | "zh": { 41 | "actionName": "购买内存", 42 | "template": " 购买了价值 {{quant}} 的内存" 43 | } 44 | }, 45 | "sellram": { 46 | "en": { 47 | "actionName": "Sell RAM", 48 | "template": " sold bytes RAM" 49 | }, 50 | "zh": { 51 | "actionName": "卖出内存", 52 | "template": " 卖出了 bytes的内存" 53 | } 54 | }, 55 | "delegatebw": { 56 | "en": { 57 | "actionName": "Stake Resource", 58 | "template": "\n delegated for {{stake_net_quantity}} in Net and {{stake_cpu_quantity}} in CPU, with EOS transferred.\n delegated for {{stake_net_quantity}} in Net and {{stake_cpu_quantity}} in CPU, without EOS transferred.\n " 59 | }, 60 | "zh": { 61 | "actionName": "抵押资源", 62 | "template": "\n 抵押了价值 {{stake_net_quantity}} 的带宽和价值 {{stake_cpu_quantity}} 的CPU,并转移了EOS\n 抵押了价值 {{stake_net_quantity}} 的带宽和价值 {{stake_cpu_quantity}} 的CPU,未转移EOS\n " 63 | } 64 | }, 65 | "undelegatebw": { 66 | "en": { 67 | "actionName": "Unstake Resource", 68 | "template": " unstaked from the account {{unstake_net_quantity}} for Net and {{unstake_cpu_quantity}} for CPU" 69 | }, 70 | "zh": { 71 | "actionName": "赎回资源", 72 | "template": " 赎回了之前为 抵押的价值 {{unstake_net_quantity}} 的带宽和价值 {{unstake_cpu_quantity}} 的CPU" 73 | } 74 | }, 75 | "setcode": { 76 | "en": { 77 | "actionName": "Deploy Contract", 78 | "template": "Contract code deployed to " 79 | }, 80 | "zh": { 81 | "actionName": "部署智能合约", 82 | "template": " 部署了一个智能合约" 83 | } 84 | }, 85 | "setabi": { 86 | "en": { 87 | "actionName": "Deploy Contract", 88 | "template": " Contract ABI deployed to " 89 | }, 90 | "zh": { 91 | "actionName": "部署智能合约", 92 | "template": " 部署了一个智能合约的ABI接口" 93 | } 94 | }, 95 | "updateauth": { 96 | "en": { 97 | "actionName": "Update Auth", 98 | "template": " updated permission group {{permission}} " 99 | }, 100 | "zh": { 101 | "actionName": "修改权限", 102 | "template": " 将其 {{permission}} 权限更新为 " 103 | } 104 | }, 105 | "regproducer": { 106 | "en": { 107 | "actionName": "Register Producer", 108 | "template": " updated BP info, with " 109 | }, 110 | "zh": { 111 | "actionName": "更新节点信息", 112 | "template": " 更新了节点信息 " 113 | } 114 | }, 115 | "unregprod": { 116 | "en": { 117 | "actionName": "Unregister Producer", 118 | "template": " unregistered Producer" 119 | }, 120 | "zh": { 121 | "actionName": "注销节点", 122 | "template": " 注销了其节点身份" 123 | } 124 | }, 125 | "regproxy": { 126 | "en": { 127 | "actionName": "Register Proxy", 128 | "template": "\n registered as a proxy\n unregistered as a proxy\n " 129 | }, 130 | "zh": { 131 | "actionName": "注册代理", 132 | "template": "\n 注册了代理身份\n 注销了代理身份\n " 133 | } 134 | }, 135 | "bidname": { 136 | "en": { 137 | "actionName": "Account Bids", 138 | "template": " bid {{bid}} for the name " 139 | }, 140 | "zh": { 141 | "actionName": "竞拍账户", 142 | "template": " 以 {{bid}} 的价格竞拍账号 " 143 | } 144 | }, 145 | "voteproducer": { 146 | "en": { 147 | "actionName": "Vote", 148 | "template": "\n delegate the votes to \n voted to \n " 149 | }, 150 | "zh": { 151 | "actionName": "投票", 152 | "template": "\n 将票委托给了代理 \n 投票给了 \n " 153 | } 154 | }, 155 | "claimrewards": { 156 | "en": { 157 | "actionName": "Claim Rewards", 158 | "template": " claimed rewards" 159 | }, 160 | "zh": { 161 | "actionName": "申领奖励", 162 | "template": " 申领了奖励" 163 | } 164 | }, 165 | "linkauth": { 166 | "en": { 167 | "actionName": "Link Auth", 168 | "template": "'s permission group {{requirement}} is authorized to access " 169 | }, 170 | "zh": { 171 | "actionName": "授权", 172 | "template": " 授权其 {{requirement}} 权限组可以访问 " 173 | } 174 | }, 175 | "unlinkauth": { 176 | "en": { 177 | "actionName": "Unlink Auth", 178 | "template": "'s permission group prohibited to access contract " 179 | }, 180 | "zh": { 181 | "actionName": "取消授权", 182 | "template": " 取消了相关权限组访问 的权限" 183 | } 184 | } 185 | }, 186 | "eosio.token": { 187 | "transfer": { 188 | "en": { 189 | "actionName": "Token Transfer", 190 | "template": "" 191 | }, 192 | "zh": { 193 | "actionName": "代币转账", 194 | "template": "" 195 | } 196 | }, 197 | "issue": { 198 | "en": { 199 | "actionName": "Token Issue", 200 | "template": "System issued to {{memo}}" 201 | }, 202 | "zh": { 203 | "actionName": "代币增发", 204 | "template": "系统增发了 {{memo}}" 205 | } 206 | } 207 | }, 208 | "higoldtokens": { 209 | "startpos": { 210 | "en": { 211 | "actionName": "Start Proof of Stake", 212 | "template": "
Issuer Start the Proof of Stake Mining for
Connector Weight: CW={{weight.slice(0,-18)}}/1000
Base Stake Supply: R={{base_stake.slice(0,-4)}} Stake
Base Connector Balance: C={{base_token}}
Base Stake Price = C÷R÷CW
{{memo}}" 213 | }, 214 | "zh": { 215 | "actionName": "启动Proof of Stake挖矿", 216 | "template": "
发行人启动{{base_token.slice(-4)}} token 的 Proof of Stake 挖矿
Connector Weight: CW={{weight.slice(0,-18)}}/1000
Base Stake Supply: R={{base_stake.slice(0,-4)}} Stake
Base Connector Balance: C={{base_token}}
Base Stake Price = C÷R÷CW
{{memo}}" 217 | } 218 | }, 219 | "pos": { 220 | "en": { 221 | "actionName": "PoS Mining", 222 | "template": " Proof of Stake for " 223 | }, 224 | "zh": { 225 | "actionName": "Pos挖矿", 226 | "template": " 进行了 Proof of Stake 挖矿" 227 | } 228 | }, 229 | "buystake": { 230 | "en": { 231 | "actionName": "Buy Stake", 232 | "template": " Buy Stake cost " 233 | }, 234 | "zh": { 235 | "actionName": "购买Stake", 236 | "template": " 购买了价值 的 Stake" 237 | } 238 | }, 239 | "sellstake": { 240 | "en": { 241 | "actionName": "Sell Stake", 242 | "template": " Sell {{stake.split(' ')[0]}} Stake in " 243 | }, 244 | "zh": { 245 | "actionName": "出售Stake", 246 | "template": " 出售 {{stake.split(' ')[0]}} Stake 并获取 " 247 | } 248 | } 249 | }, 250 | "onedex123451": { 251 | "ask": { 252 | "en": { 253 | "actionName": "Ask", 254 | "template": " with price of {{price}} ask source is:{{source}}, order id is:{{uuid}}" 255 | }, 256 | "zh": { 257 | "actionName": "卖", 258 | "template": "以价格{{price}} 卖出 订单来源:{{source}}, 订单编号:{{uuid}}" 259 | } 260 | }, 261 | "bid": { 262 | "en": { 263 | "actionName": "Bid", 264 | "template": " bid source is:{{source}}, order id is:{{uuid}}" 265 | }, 266 | "zh": { 267 | "actionName": "买", 268 | "template": " 买入 订单来源:{{source}}, 订单编号:{{uuid}}" 269 | } 270 | }, 271 | "cancelorder": { 272 | "en": { 273 | "actionName": "Cancel Order", 274 | "template": " cancel the order that Identity Number is: {{uuid}}, scope is {{scope}}" 275 | }, 276 | "zh": { 277 | "actionName": "取消订单", 278 | "template": " 取消订单id是{{uuid}}, 订单域是 {{scope}}" 279 | } 280 | }, 281 | "createorder": { 282 | "en": { 283 | "actionName": "Create Order", 284 | "template": " create order source is:{{source}}, order id is:{{uuid}}, price is: {{price}}" 285 | }, 286 | "zh": { 287 | "actionName": "打开订单", 288 | "template": " 卖出 订单来源:{{source}}, 订单编号:{{uuid}}, 订单价格:{{price}}" 289 | } 290 | } 291 | }, 292 | "oneotc123451": { 293 | "addblacklist": { 294 | "en": { 295 | "actionName": "Add Blacklist", 296 | "template": "Add user to blacklist" 297 | }, 298 | "zh": { 299 | "actionName": "添加黑名单", 300 | "template": "用户 加入黑名单" 301 | } 302 | }, 303 | "deleteblack": { 304 | "en": { 305 | "actionName": "Delete Blacklist", 306 | "template": "Remove user from blacklist" 307 | }, 308 | "zh": { 309 | "actionName": "移出黑名单", 310 | "template": "用户 移出黑名单" 311 | } 312 | }, 313 | "adminbiz": { 314 | "en": { 315 | "actionName": "Admin Biz", 316 | "template": "Administrator change merchant name is {{eosname}} status to {{status}}" 317 | }, 318 | "zh": { 319 | "actionName": "管理商家", 320 | "template": "管理员将商家{{eosname}}营业状态修改为{{status}}" 321 | } 322 | }, 323 | "bizapply": { 324 | "en": { 325 | "actionName": "Biz Apply", 326 | "template": "User apply to become a merchant, method is:{{method}}, information:{{info}}, description is {{desc}} and introduce is {{introduce}}" 327 | }, 328 | "zh": { 329 | "actionName": "商家申请", 330 | "template": "用户 申请成为商家, 联系方式是:{{method}}, 商家信息:{{info}}, 商家描述:{{desc}} 商家介绍:{{introduce}}" 331 | } 332 | }, 333 | "bizask": { 334 | "en": { 335 | "actionName": "Biz Ask", 336 | "template": "Merchant ask price is {{price}}, rate is {{rate}}, legal type is {{legaltype}} and source is {{source}} " 337 | }, 338 | "zh": { 339 | "actionName": "商家卖出", 340 | "template": "商家 卖出 价格{{price}}, 费率 {{rate}}, 法币类型 {{legaltype}} 以及订单来源 {{source}} " 341 | } 342 | }, 343 | "bizbid": { 344 | "en": { 345 | "actionName": "Biz Bid", 346 | "template": "Merchant bid price is {{price}}, rate is {{rate}}, legal type is {{legaltype}} and source is {{source}}" 347 | }, 348 | "zh": { 349 | "actionName": "商家买入", 350 | "template": "商家 买入 价格{{price}}, 费率 {{rate}}, 法币类型 {{legaltype}} 以及订单来源 {{source}}" 351 | } 352 | }, 353 | "bizcancel": { 354 | "en": { 355 | "actionName": "Biz Cancel", 356 | "template": "Cancel order id is {{bizid}} source is {{source}}" 357 | }, 358 | "zh": { 359 | "actionName": "取消订单", 360 | "template": "取消订单,订单id是 {{bizid}} 订单来源是 {{source}}" 361 | } 362 | }, 363 | "bizconfirm": { 364 | "en": { 365 | "actionName": "Biz Confirm", 366 | "template": "Merchant confirm oporder, opid is {{opid}}, source is {{source}}" 367 | }, 368 | "zh": { 369 | "actionName": "商家确认", 370 | "template": "商家确认订单, 订单id是{{opid}},订单来源是{{source}}" 371 | } 372 | }, 373 | "editbizinfo": { 374 | "en": { 375 | "actionName": "Edit Bizinfo", 376 | "template": "Edit Merchant Info, method is:{{method}}, information:{{info}}, description is {{desc}} and introduce is {{introduce}}" 377 | }, 378 | "zh": { 379 | "actionName": "编辑商家信息", 380 | "template": "编辑商家 信息, 联系方式是:{{method}}, 商家信息:{{info}}, 商家描述:{{desc}} 商家介绍:{{introduce}}" 381 | } 382 | }, 383 | "claim": { 384 | "en": { 385 | "actionName": "Claim", 386 | "template": " claim the deposit" 387 | }, 388 | "zh": { 389 | "actionName": "赎回", 390 | "template": " 赎回押金" 391 | } 392 | }, 393 | "clientask": { 394 | "en": { 395 | "actionName": "Client Ask", 396 | "template": " ask Merchant order id is:{{bizid}}, price is: {{price}}, legal type is {{legaltype}} and source is {{source}}" 397 | }, 398 | "zh": { 399 | "actionName": "用户卖出", 400 | "template": " 卖出 商家订单号是:{{bizid}}, 价格是: {{price}}, 法币类型是 {{legaltype}} 订单来源是 {{source}}" 401 | } 402 | }, 403 | "clientbid": { 404 | "en": { 405 | "actionName": "Client Bid", 406 | "template": " bid Merchant order id is:{{bizid}}, price is: {{price}}, legal type is {{legaltype}} and source is {{source}}" 407 | }, 408 | "zh": { 409 | "actionName": "用户买入", 410 | "template": " 买入 商家订单号是:{{bizid}}, 价格是: {{price}}, 法币类型是 {{legaltype}} 订单来源是 {{source}}" 411 | } 412 | }, 413 | "clientcancel": { 414 | "en": { 415 | "actionName": "Client Cancel", 416 | "template": "User Cancel the order: id is {{opid}}, source is {{source}}, scope is {{scope}}, memo is {{memo}}" 417 | }, 418 | "zh": { 419 | "actionName": "用户取消", 420 | "template": "用户取消订单:订单id{{opid}}, 订单来源 {{source}}, 订单域{{scope}}, 备注{{memo}}" 421 | } 422 | }, 423 | "cltconfirm": { 424 | "en": { 425 | "actionName": "Clt Confirm", 426 | "template": "User confirm order: id is {{opid}}, source is {{source}}, scope is {{scope}}, memo is {{memo}}" 427 | }, 428 | "zh": { 429 | "actionName": "用户确认", 430 | "template": "用户确认订单: 订单id{{opid}}, 订单来源 {{source}}, 订单域{{scope}}, 备注{{memo}}" 431 | } 432 | }, 433 | "expireorder": { 434 | "en": { 435 | "actionName": "Expire Order", 436 | "template": "Administrator Check Expire Order, id is {{opid}}, scope is {{scope}} memo is {{memo}}" 437 | }, 438 | "zh": { 439 | "actionName": "订单超时", 440 | "template": "管理员确认订单操超时, 订单id {{opid}}, 订单域{{scope}}, 备注{{memo}}" 441 | } 442 | }, 443 | "releaseorder": { 444 | "en": { 445 | "actionName": "Release Order", 446 | "template": "Administrator Release Order, id is {{opid}}, scope is {{scope}} memo is {{memo}}" 447 | }, 448 | "zh": { 449 | "actionName": "释放订单", 450 | "template": "管理员释放订单, 订单id {{opid}}, 订单域{{scope}}, 备注{{memo}}" 451 | } 452 | }, 453 | "openorder": { 454 | "en": { 455 | "actionName": "Open Order", 456 | "template": " open the order for memo is: {{memo}}" 457 | }, 458 | "zh": { 459 | "actionName": "打开订单", 460 | "template": " 打开订单 备注: {{memo}}" 461 | } 462 | }, 463 | "checkfreeze": { 464 | "en": { 465 | "actionName": "Check Freeze", 466 | "template": "Check if the order is frozen, id is {{opid}}, scope is {{scope}} source is {{source}} " 467 | }, 468 | "zh": { 469 | "actionName": "检查冻结", 470 | "template": "检查订单是否冻结, 订单id {{opid}}, 订单域{{scope}}, 订单来源{{source}}" 471 | } 472 | } 473 | }, 474 | "whaleextrust": { 475 | "verifytrade": { 476 | "en": { 477 | "actionName": "Trade", 478 | "template": "
Trade:
bought ,
sold
" 479 | }, 480 | "zh": { 481 | "actionName": "成交", 482 | "template": "
成交:
买入 ,
卖出
" 483 | } 484 | }, 485 | "verifytrade2": { 486 | "en": { 487 | "actionName": "Trade", 488 | "template": "
Trade:
bought ,
sold
" 489 | }, 490 | "zh": { 491 | "actionName": "成交", 492 | "template": "
成交:
买入 ,
卖出
" 493 | } 494 | }, 495 | "verifyad": { 496 | "en": { 497 | "actionName": "AirGrab", 498 | "template": " received airdrop from " 499 | }, 500 | "zh": { 501 | "actionName": "领取", 502 | "template": " 领取 空投" 503 | } 504 | }, 505 | "verifywd": { 506 | "en": { 507 | "actionName": "Withdraw", 508 | "template": " withdrew to EOS account" 509 | }, 510 | "zh": { 511 | "actionName": "提现", 512 | "template": " 从合约提现 到个人EOS帐户" 513 | } 514 | }, 515 | "verifywd2": { 516 | "en": { 517 | "actionName": "Withdraw", 518 | "template": " withdrew to EOS account" 519 | }, 520 | "zh": { 521 | "actionName": "提现", 522 | "template": " 从合约提现 到个人EOS帐户" 523 | } 524 | }, 525 | "verifystake": { 526 | "en": { 527 | "actionName": "Stake", 528 | "template": " staked for free transactions of equal value." 529 | }, 530 | "zh": { 531 | "actionName": "锁定", 532 | "template": " 锁定 等值的免费交易额度" 533 | } 534 | }, 535 | "bind": { 536 | "en": { 537 | "actionName": "Bind", 538 | "template": " bound a pair of public/private keys. Public key is: {{pub_key}}" 539 | }, 540 | "zh": { 541 | "actionName": "绑定", 542 | "template": " 绑定了一对公私钥, 公钥为 {{pub_key}}" 543 | } 544 | }, 545 | "unbind": { 546 | "en": { 547 | "actionName": "Unbind", 548 | "template": " unbound a pair of public/private keys. Public key is: {{pub_key}}" 549 | }, 550 | "zh": { 551 | "actionName": "解绑", 552 | "template": " 解绑了一对公私钥, 公钥为 {{pub_key}}" 553 | } 554 | }, 555 | "clearsettres": { 556 | "en": { 557 | "actionName": "Clearing", 558 | "template": "WhaleEx cleared useless data for memory. " 559 | }, 560 | "zh": { 561 | "actionName": "清算", 562 | "template": "WhaleEx清理了一些无用数据来释放内存" 563 | } 564 | }, 565 | "clearing": { 566 | "en": { 567 | "actionName": "Clearing", 568 | "template": "WhaleEx completed trade clearing, awaiting settlement." 569 | }, 570 | "zh": { 571 | "actionName": "清算", 572 | "template": "WhaleEx完成了一批交易的清算, 等待结算" 573 | } 574 | }, 575 | "settlement": { 576 | "en": { 577 | "actionName": "Settlement", 578 | "template": "WhaleEx completed trade settlement. Assets have been exchanged." 579 | }, 580 | "zh": { 581 | "actionName": "结算", 582 | "template": "WhaleEx完成了一批交易的结算, 资产完成转移" 583 | } 584 | } 585 | } 586 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eos-semantics", 3 | "version": "0.0.1", 4 | "description": "EOS Semantics -- Makes EOS contract understandable.", 5 | "main": "dist/index.json", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "build": "node ./build.js", 9 | "push": "git pull --rebase && npm run build &&git add -A && git commit -m \"build\" && git push" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/BlockABC/eos-semantics.git" 14 | }, 15 | "keywords": [ 16 | "EOS", 17 | "contracts", 18 | "semantics", 19 | "EOSPark", 20 | "explorer" 21 | ], 22 | "author": "Jeff Jing", 23 | "license": "MIT", 24 | "bugs": { 25 | "url": "https://github.com/BlockABC/eos-semantics/issues" 26 | }, 27 | "homepage": "https://github.com/BlockABC/eos-semantics#readme" 28 | } 29 | -------------------------------------------------------------------------------- /readme_zh.md: -------------------------------------------------------------------------------- 1 | # EOS-Semantics 2 | > Makes your EOS contracts action data understandable, by human. 3 | 4 | ![EOSPark screenshot](./assets/eospark-screenshot.png) 5 | 6 | ## Why 7 | 由于 EOS 合约的复杂性,普通用户很难理解链上发生了什么。Dapp 开发者也经常被用户质疑链上数据的含义。 8 | 9 | EOS Semantics 的出现,可以让普通用户也可以理解合约数据,降低普通用户的参与门槛,从而提高 Dapp 的活跃度。 10 | 11 | [EOSPark](https://eospark.com) 是第一个提出并实现合约语义化的区块链浏览器。最初只应用于系统合约,获得了用户的广泛好评。现在将其语义化能力开放出来,进一步服务于广大合约开发者。 12 | 13 | ## How 14 | EOS Semantics 的基本原理类似于李嘉图合约,即将合约 action 的数据通过一个 template 渲染成人类可读的自然语言。 15 | 16 | 除此之外,EOS Semantics 提供了更多更为强大的功能,例如账号、合约跳转,代码高亮,多语言等等。 17 | 18 | 以 EOS 系统合约 eosio.token 的 issue action 为例,其合约数据为: 19 | ```json 20 | { 21 | "data": { 22 | "quantity": "1.0000 EOS", 23 | "to": "supereospark", 24 | "memo": "Good job EOS Semantics" 25 | } 26 | } 27 | ``` 28 | 29 | 则对应需要提供的语义化信息结构如下: 30 | ```json 31 | { 32 | "issue": { 33 | "actionName": "Issue Token", 34 | "template": "System issued to {{memo}}" 35 | } 36 | } 37 | ``` 38 | 39 | 最终会渲染出如下结构: 40 | 41 | ![eosio.token::issue](./assets/eosio.token-issue.png) 42 | 43 | 44 | ## Contribution 45 | 1. Clone 46 | ``` 47 | git clone https://github.com/BlockABC/eos-semantics 48 | cd eos-semantics 49 | ``` 50 | 51 | 2. 增加语义化信息 52 | 53 | 2.1 在 [Playground](https://eospark.com/semantic/playground) 测试 template 数据 54 | 55 | 2.2 在 `/semantics` 目录下面新建以以合约账号为名的 .js 文件,并增加语义化信息。 56 | > 具体语义化信息格式见下方的 [文档](https://github.com/BlockABC/eos-semantics#%E6%96%87%E6%A1%A3),或参考已有的合约内容 [eosio](https://github.com/BlockABC/eos-semantics/blob/master/semantics/eosio.js) 57 | 58 | 2.3 编译 59 | ``` 60 | npm run build 61 | ``` 62 | 3. 提交 PR 63 | 64 | 65 | ## 文档 66 | #### actionName 67 | 68 | 可读的 action 名称 69 | 70 | #### tempalte 71 | 72 | template 是一个 html 模板,采用了类似于 [Vue](https://vuejs.org) 的模板语法。如果您进行过前端开发,那对您应该是没有压力。 73 | 需要注意的是,为了安全性,template 所采用的语法集是 Vue 的子集,并且限制了部分能力。 74 | 75 | ## Template 组件 76 | 为了方便您的使用,EOS Semantics 还内置了一些组件,同时可以统一组件风格。 77 | 78 | #### If 79 | if 组件,根据参数,条件为真/假时会渲染子组件 80 | 81 | ```html 82 | Component on true 83 | ``` 84 | 85 | #### Link 86 | 渲染一个 a 标签 87 | ```html 88 | Some Web Page 89 | ``` 90 | 91 | #### Accounts 92 | 传入 accounts 数组,渲染accounts列表 93 | ```html 94 | 95 | ``` 96 | 97 | #### Account 98 | 渲染一个 a 标签,可以跳转到相应的 account 页面 99 | ```html 100 | 101 | ``` 102 | 103 | #### Contract 104 | 渲染一个 a 标签,可以跳转到相应的 contract 页面 105 | ```html 106 | 107 | ``` 108 | 109 | #### Transfer 110 | 渲染一个转账信息 111 | ```html 112 | 113 | ``` 114 | 115 | #### Memo 116 | 渲染一个 memo(一般用于transfer) 117 | ```html 118 | {{memo}} 119 | ``` 120 | 121 | #### Token 122 | 渲染一个 Token,可以带有数量,支持多种 token 格式 123 | 124 | ```html 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | ``` 137 | 138 | #### Highlight 139 | 渲染一个高亮的json 140 | ```html 141 | 142 | ``` 143 | 144 | #### Quantity 145 | 渲染一个逗号分隔的数字 146 | ```html 147 | 148 | ``` 149 | 150 | 151 | #### ActionInterface 152 | 渲染一个 action 名称 153 | ```html 154 | 155 | ``` 156 | 157 | 158 | ## Contact 159 | 请加 EOSPark 微信小助手进群联系我们: Asst_BlockAbC。 160 | 161 | ![EOSPark Assist](./assets/wechat_eospark_assist.jpeg) 162 | 163 | -------------------------------------------------------------------------------- /semantics/enbank.e.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'withdraw': { 3 | 'en': { 4 | 'actionName': 'Withdraw', 5 | 'template': ' withdraw staked {{quantity}}' 6 | }, 7 | 'zh': { 8 | 'actionName': '赎回质押', 9 | 'template': ' 赎回了质押的 {{quantity}}' 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /semantics/eosio.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'newaccount': { 3 | 'en': { 4 | 'actionName': 'Create Account', 5 | 'template': ' created new account ' 6 | }, 7 | 'zh': { 8 | 'actionName': '创建账户', 9 | 'template': ' 创建了账户 ' 10 | } 11 | }, 12 | 'buyrambytes': { 13 | 'en': { 14 | 'actionName': 'Buy RAM', 15 | 'template': ' bought {{bytes}} bytes RAM for ' 16 | }, 17 | 'zh': { 18 | 'actionName': '购买内存', 19 | 'template': ' 购买了 {{bytes}} bytes内存' 20 | } 21 | }, 22 | 'buyram': { 23 | 'en': { 24 | 'actionName': 'Buy RAM', 25 | 'template': ' bought {{quant}} RAM for ' 26 | }, 27 | 'zh': { 28 | 'actionName': '购买内存', 29 | 'template': ' 购买了价值 {{quant}} 的内存' 30 | } 31 | }, 32 | 'sellram': { 33 | 'en': { 34 | 'actionName': 'Sell RAM', 35 | 'template': ' sold bytes RAM' 36 | }, 37 | 'zh': { 38 | 'actionName': '卖出内存', 39 | 'template': ' 卖出了 bytes的内存' 40 | } 41 | }, 42 | 'delegatebw': { 43 | 'en': { 44 | 'actionName': 'Stake Resource', 45 | 'template': ` 46 | delegated for {{stake_net_quantity}} in Net and {{stake_cpu_quantity}} in CPU, with EOS transferred. 47 | delegated for {{stake_net_quantity}} in Net and {{stake_cpu_quantity}} in CPU, without EOS transferred. 48 | ` 49 | }, 50 | 'zh': { 51 | 'actionName': '抵押资源', 52 | 'template': ` 53 | 抵押了价值 {{stake_net_quantity}} 的带宽和价值 {{stake_cpu_quantity}} 的CPU,并转移了EOS 54 | 抵押了价值 {{stake_net_quantity}} 的带宽和价值 {{stake_cpu_quantity}} 的CPU,未转移EOS 55 | ` 56 | } 57 | }, 58 | 'undelegatebw': { 59 | 'en': { 60 | 'actionName': 'Unstake Resource', 61 | 'template': ' unstaked from the account {{unstake_net_quantity}} for Net and {{unstake_cpu_quantity}} for CPU' 62 | }, 63 | 'zh': { 64 | 'actionName': '赎回资源', 65 | 'template': ' 赎回了之前为 抵押的价值 {{unstake_net_quantity}} 的带宽和价值 {{unstake_cpu_quantity}} 的CPU' 66 | } 67 | }, 68 | 'setcode': { 69 | 'en': { 70 | 'actionName': 'Deploy Contract', 71 | 'template': 'Contract code deployed to ' 72 | }, 73 | 'zh': { 74 | 'actionName': '部署智能合约', 75 | 'template': ' 部署了一个智能合约' 76 | } 77 | }, 78 | 'setabi': { 79 | 'en': { 80 | 'actionName': 'Deploy Contract', 81 | 'template': ' Contract ABI deployed to ' 82 | }, 83 | 'zh': { 84 | 'actionName': '部署智能合约', 85 | 'template': ' 部署了一个智能合约的ABI接口' 86 | } 87 | }, 88 | 'updateauth': { 89 | 'en': { 90 | 'actionName': 'Update Auth', 91 | 'template': ' updated permission group {{permission}} ' 92 | }, 93 | 'zh': { 94 | 'actionName': '修改权限', 95 | 'template': ' 将其 {{permission}} 权限更新为 ' 96 | } 97 | }, 98 | 'regproducer': { 99 | 'en': { 100 | 'actionName': 'Register Producer', 101 | 'template': ' updated BP info, with ' 102 | }, 103 | 'zh': { 104 | 'actionName': '更新节点信息', 105 | 'template': ' 更新了节点信息 ' 106 | } 107 | }, 108 | 'unregprod': { 109 | 'en': { 110 | 'actionName': 'Unregister Producer', 111 | 'template': ' unregistered Producer' 112 | }, 113 | 'zh': { 114 | 'actionName': '注销节点', 115 | 'template': ' 注销了其节点身份' 116 | } 117 | }, 118 | 'regproxy': { 119 | 'en': { 120 | 'actionName': 'Register Proxy', 121 | 'template': ` 122 | registered as a proxy 123 | unregistered as a proxy 124 | ` 125 | }, 126 | 'zh': { 127 | 'actionName': '注册代理', 128 | 'template': ` 129 | 注册了代理身份 130 | 注销了代理身份 131 | ` 132 | } 133 | }, 134 | 'bidname': { 135 | 'en': { 136 | 'actionName': 'Account Bids', 137 | 'template': ' bid {{bid}} for the name ' 138 | }, 139 | 'zh': { 140 | 'actionName': '竞拍账户', 141 | 'template': ' 以 {{bid}} 的价格竞拍账号 ' 142 | } 143 | }, 144 | 'voteproducer': { 145 | 'en': { 146 | 'actionName': 'Vote', 147 | 'template': ` 148 | delegate the votes to 149 | voted to 150 | ` 151 | }, 152 | 'zh': { 153 | 'actionName': '投票', 154 | 'template': ` 155 | 将票委托给了代理 156 | 投票给了 157 | ` 158 | } 159 | }, 160 | 'claimrewards': { 161 | 'en': { 162 | 'actionName': 'Claim Rewards', 163 | 'template': ' claimed rewards' 164 | }, 165 | 'zh': { 166 | 'actionName': '申领奖励', 167 | 'template': ' 申领了奖励' 168 | } 169 | }, 170 | 'linkauth': { 171 | 'en': { 172 | 'actionName': 'Link Auth', 173 | 'template': "'s permission group {{requirement}} is authorized to access " 174 | }, 175 | 'zh': { 176 | 'actionName': '授权', 177 | 'template': ' 授权其 {{requirement}} 权限组可以访问 ' 178 | } 179 | }, 180 | 'unlinkauth': { 181 | 'en': { 182 | 'actionName': 'Unlink Auth', 183 | 'template': "'s permission group prohibited to access contract " 184 | }, 185 | 'zh': { 186 | 'actionName': '取消授权', 187 | 'template': ' 取消了相关权限组访问 的权限' 188 | } 189 | } 190 | } -------------------------------------------------------------------------------- /semantics/eosio.token.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'transfer': { 3 | 'en': { 4 | 'actionName': 'Token Transfer', 5 | 'template': '' 6 | }, 7 | 'zh': { 8 | 'actionName': '代币转账', 9 | 'template': '' 10 | } 11 | }, 12 | 'issue': { 13 | 'en': { 14 | 'actionName': 'Token Issue', 15 | 'template': 'System issued to {{memo}}' 16 | }, 17 | 'zh': { 18 | 'actionName': '代币增发', 19 | 'template': '系统增发了 {{memo}}' 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /semantics/higoldtokens.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'startpos': { 3 | 'en': { 4 | 'actionName': 'Start Proof of Stake', 5 | 'template': "
Issuer Start the Proof of Stake Mining for
Connector Weight: CW={{weight.slice(0,-18)}}/1000
Base Stake Supply: R={{base_stake.slice(0,-4)}} Stake
Base Connector Balance: C={{base_token}}
Base Stake Price = C÷R÷CW
{{memo}}" 6 | }, 7 | 'zh': { 8 | 'actionName': '启动Proof of Stake挖矿', 9 | 'template': '
发行人启动{{base_token.slice(-4)}} token 的 Proof of Stake 挖矿
Connector Weight: CW={{weight.slice(0,-18)}}/1000
Base Stake Supply: R={{base_stake.slice(0,-4)}} Stake
Base Connector Balance: C={{base_token}}
Base Stake Price = C÷R÷CW
{{memo}}' 10 | } 11 | }, 12 | 'pos': { 13 | 'en': { 14 | 'actionName': 'PoS Mining', 15 | 'template': " Proof of Stake for " 16 | }, 17 | 'zh': { 18 | 'actionName': 'Pos挖矿', 19 | 'template': " 进行了 Proof of Stake 挖矿" 20 | } 21 | }, 22 | 'buystake': { 23 | 'en': { 24 | 'actionName': 'Buy Stake', 25 | 'template': " Buy Stake cost " 26 | }, 27 | 'zh': { 28 | 'actionName': '购买Stake', 29 | 'template': " 购买了价值 的 Stake" 30 | } 31 | }, 32 | 'sellstake': { 33 | 'en': { 34 | 'actionName': 'Sell Stake', 35 | 'template': " Sell {{stake.split(' ')[0]}} Stake in " 36 | }, 37 | 'zh': { 38 | 'actionName': '出售Stake', 39 | 'template': " 出售 {{stake.split(' ')[0]}} Stake 并获取 " 40 | } 41 | }, 42 | } 43 | -------------------------------------------------------------------------------- /semantics/onedex123451.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "ask": { 3 | "en": { 4 | "actionName": "Ask", 5 | "template": " with price of {{price}} ask source is:{{source}}, order id is:{{uuid}}" 6 | }, 7 | "zh": { 8 | "actionName": "卖", 9 | "template": "以价格{{price}} 卖出 订单来源:{{source}}, 订单编号:{{uuid}}" 10 | } 11 | }, 12 | "bid": { 13 | "en": { 14 | "actionName": "Bid", 15 | "template": " bid source is:{{source}}, order id is:{{uuid}}" 16 | }, 17 | "zh": { 18 | "actionName": "买", 19 | "template": " 买入 订单来源:{{source}}, 订单编号:{{uuid}}" 20 | } 21 | }, 22 | "cancelorder": { 23 | "en": { 24 | "actionName": "Cancel Order", 25 | "template": " cancel the order that Identity Number is: {{uuid}}, scope is {{scope}}" 26 | }, 27 | "zh": { 28 | "actionName": "取消订单", 29 | "template": " 取消订单id是{{uuid}}, 订单域是 {{scope}}" 30 | } 31 | }, 32 | "createorder": { 33 | "en": { 34 | "actionName": "Create Order", 35 | "template": " create order source is:{{source}}, order id is:{{uuid}}, price is: {{price}}" 36 | }, 37 | "zh": { 38 | "actionName": "打开订单", 39 | "template": " 卖出 订单来源:{{source}}, 订单编号:{{uuid}}, 订单价格:{{price}}" 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /semantics/oneotc123451.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "addblacklist": { 3 | "en": { 4 | "actionName": "Add Blacklist", 5 | "template": "Add user to blacklist" 6 | }, 7 | "zh": { 8 | "actionName": "添加黑名单", 9 | "template": "用户 加入黑名单" 10 | } 11 | }, 12 | "deleteblack": { 13 | "en": { 14 | "actionName": "Delete Blacklist", 15 | "template": "Remove user from blacklist" 16 | }, 17 | "zh": { 18 | "actionName": "移出黑名单", 19 | "template": "用户 移出黑名单" 20 | } 21 | }, 22 | "adminbiz": { 23 | "en": { 24 | "actionName": "Admin Biz", 25 | "template": "Administrator change merchant name is {{eosname}} status to {{status}}" 26 | }, 27 | "zh": { 28 | "actionName": "管理商家", 29 | "template": "管理员将商家{{eosname}}营业状态修改为{{status}}" 30 | } 31 | }, 32 | "bizapply": { 33 | "en": { 34 | "actionName": "Biz Apply", 35 | "template": "User apply to become a merchant, method is:{{method}}, information:{{info}}, description is {{desc}} and introduce is {{introduce}}" 36 | }, 37 | "zh": { 38 | "actionName": "商家申请", 39 | "template": "用户 申请成为商家, 联系方式是:{{method}}, 商家信息:{{info}}, 商家描述:{{desc}} 商家介绍:{{introduce}}" 40 | } 41 | }, 42 | "bizask": { 43 | "en": { 44 | "actionName": "Biz Ask", 45 | "template": "Merchant ask price is {{price}}, rate is {{rate}}, legal type is {{legaltype}} and source is {{source}} " 46 | }, 47 | "zh": { 48 | "actionName": "商家卖出", 49 | "template": "商家 卖出 价格{{price}}, 费率 {{rate}}, 法币类型 {{legaltype}} 以及订单来源 {{source}} " 50 | } 51 | }, 52 | "bizbid": { 53 | "en": { 54 | "actionName": "Biz Bid", 55 | "template": "Merchant bid price is {{price}}, rate is {{rate}}, legal type is {{legaltype}} and source is {{source}}" 56 | }, 57 | "zh": { 58 | "actionName": "商家买入", 59 | "template": "商家 买入 价格{{price}}, 费率 {{rate}}, 法币类型 {{legaltype}} 以及订单来源 {{source}}" 60 | } 61 | }, 62 | "bizcancel": { 63 | "en": { 64 | "actionName": "Biz Cancel", 65 | "template": "Cancel order id is {{bizid}} source is {{source}}" 66 | }, 67 | "zh": { 68 | "actionName": "取消订单", 69 | "template": "取消订单,订单id是 {{bizid}} 订单来源是 {{source}}" 70 | } 71 | }, 72 | "bizconfirm": { 73 | "en": { 74 | "actionName": "Biz Confirm", 75 | "template": "Merchant confirm oporder, opid is {{opid}}, source is {{source}}" 76 | }, 77 | "zh": { 78 | "actionName": "商家确认", 79 | "template": "商家确认订单, 订单id是{{opid}},订单来源是{{source}}" 80 | } 81 | }, 82 | "editbizinfo": { 83 | "en": { 84 | "actionName": "Edit Bizinfo", 85 | "template": "Edit Merchant Info, method is:{{method}}, information:{{info}}, description is {{desc}} and introduce is {{introduce}}" 86 | }, 87 | "zh": { 88 | "actionName": "编辑商家信息", 89 | "template": "编辑商家 信息, 联系方式是:{{method}}, 商家信息:{{info}}, 商家描述:{{desc}} 商家介绍:{{introduce}}" 90 | } 91 | }, 92 | "claim": { 93 | "en": { 94 | "actionName": "Claim", 95 | "template": " claim the deposit" 96 | }, 97 | "zh": { 98 | "actionName": "赎回", 99 | "template": " 赎回押金" 100 | } 101 | }, 102 | "clientask": { 103 | "en": { 104 | "actionName": "Client Ask", 105 | "template": " ask Merchant order id is:{{bizid}}, price is: {{price}}, legal type is {{legaltype}} and source is {{source}}" 106 | }, 107 | "zh": { 108 | "actionName": "用户卖出", 109 | "template": " 卖出 商家订单号是:{{bizid}}, 价格是: {{price}}, 法币类型是 {{legaltype}} 订单来源是 {{source}}" 110 | } 111 | }, 112 | "clientbid": { 113 | "en": { 114 | "actionName": "Client Bid", 115 | "template": " bid Merchant order id is:{{bizid}}, price is: {{price}}, legal type is {{legaltype}} and source is {{source}}" 116 | }, 117 | "zh": { 118 | "actionName": "用户买入", 119 | "template": " 买入 商家订单号是:{{bizid}}, 价格是: {{price}}, 法币类型是 {{legaltype}} 订单来源是 {{source}}" 120 | } 121 | }, 122 | "clientcancel": { 123 | "en": { 124 | "actionName": "Client Cancel", 125 | "template": "User Cancel the order: id is {{opid}}, source is {{source}}, scope is {{scope}}, memo is {{memo}}" 126 | }, 127 | "zh": { 128 | "actionName": "用户取消", 129 | "template": "用户取消订单:订单id{{opid}}, 订单来源 {{source}}, 订单域{{scope}}, 备注{{memo}}" 130 | } 131 | }, 132 | "cltconfirm": { 133 | "en": { 134 | "actionName": "Clt Confirm", 135 | "template": "User confirm order: id is {{opid}}, source is {{source}}, scope is {{scope}}, memo is {{memo}}" 136 | }, 137 | "zh": { 138 | "actionName": "用户确认", 139 | "template": "用户确认订单: 订单id{{opid}}, 订单来源 {{source}}, 订单域{{scope}}, 备注{{memo}}" 140 | } 141 | }, 142 | "expireorder": { 143 | "en": { 144 | "actionName": "Expire Order", 145 | "template": "Administrator Check Expire Order, id is {{opid}}, scope is {{scope}} memo is {{memo}}" 146 | }, 147 | "zh": { 148 | "actionName": "订单超时", 149 | "template": "管理员确认订单操超时, 订单id {{opid}}, 订单域{{scope}}, 备注{{memo}}" 150 | } 151 | }, 152 | "releaseorder": { 153 | "en": { 154 | "actionName": "Release Order", 155 | "template": "Administrator Release Order, id is {{opid}}, scope is {{scope}} memo is {{memo}}" 156 | }, 157 | "zh": { 158 | "actionName": "释放订单", 159 | "template": "管理员释放订单, 订单id {{opid}}, 订单域{{scope}}, 备注{{memo}}" 160 | } 161 | }, 162 | "openorder": { 163 | "en": { 164 | "actionName": "Open Order", 165 | "template": " open the order for memo is: {{memo}}" 166 | }, 167 | "zh": { 168 | "actionName": "打开订单", 169 | "template": " 打开订单 备注: {{memo}}" 170 | } 171 | }, 172 | "checkfreeze": { 173 | "en": { 174 | "actionName": "Check Freeze", 175 | "template": "Check if the order is frozen, id is {{opid}}, scope is {{scope}} source is {{source}} " 176 | }, 177 | "zh": { 178 | "actionName": "检查冻结", 179 | "template": "检查订单是否冻结, 订单id {{opid}}, 订单域{{scope}}, 订单来源{{source}}" 180 | } 181 | } 182 | } 183 | -------------------------------------------------------------------------------- /semantics/whaleextrust.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'verifytrade': { 3 | 'en': { 4 | 'actionName': 'Trade', 5 | 'template': "
Trade:
bought ,
sold
" 6 | }, 7 | 'zh': { 8 | 'actionName': '成交', 9 | 'template': "
成交:
买入 ,
卖出
" 10 | } 11 | }, 12 | 'verifytrade2': { 13 | 'en': { 14 | 'actionName': 'Trade', 15 | 'template': "
Trade:
bought ,
sold
" 16 | }, 17 | 'zh': { 18 | 'actionName': '成交', 19 | 'template': "
成交:
买入 ,
卖出
" 20 | } 21 | }, 22 | 'verifyad': { 23 | 'en': { 24 | 'actionName': 'AirGrab', 25 | 'template': " received airdrop from " 26 | }, 27 | 'zh': { 28 | 'actionName': '领取', 29 | 'template': " 领取 空投" 30 | } 31 | }, 32 | 'verifywd': { 33 | 'en': { 34 | 'actionName': 'Withdraw', 35 | 'template': " withdrew to EOS account" 36 | }, 37 | 'zh': { 38 | 'actionName': '提现', 39 | 'template': " 从合约提现 到个人EOS帐户" 40 | } 41 | }, 42 | 'verifywd2': { 43 | 'en': { 44 | 'actionName': 'Withdraw', 45 | 'template': " withdrew to EOS account" 46 | }, 47 | 'zh': { 48 | 'actionName': '提现', 49 | 'template': " 从合约提现 到个人EOS帐户" 50 | } 51 | }, 52 | 'verifystake': { 53 | 'en': { 54 | 'actionName': 'Stake', 55 | 'template': " staked for free transactions of equal value." 56 | }, 57 | 'zh': { 58 | 'actionName': '锁定', 59 | 'template': " 锁定 等值的免费交易额度" 60 | } 61 | }, 62 | 'bind': { 63 | 'en': { 64 | 'actionName': 'Bind', 65 | 'template': " bound a pair of public/private keys. Public key is: {{pub_key}}" 66 | }, 67 | 'zh': { 68 | 'actionName': '绑定', 69 | 'template': " 绑定了一对公私钥, 公钥为 {{pub_key}}" 70 | } 71 | }, 72 | 'unbind': { 73 | 'en': { 74 | 'actionName': 'Unbind', 75 | 'template': " unbound a pair of public/private keys. Public key is: {{pub_key}}" 76 | }, 77 | 'zh': { 78 | 'actionName': '解绑', 79 | 'template': " 解绑了一对公私钥, 公钥为 {{pub_key}}" 80 | } 81 | }, 82 | 'clearsettres': { 83 | 'en': { 84 | 'actionName': 'Clearing', 85 | 'template': 'WhaleEx cleared useless data for memory. ' 86 | }, 87 | 'zh': { 88 | 'actionName': '清算', 89 | 'template': 'WhaleEx清理了一些无用数据来释放内存' 90 | } 91 | }, 92 | 'clearing': { 93 | 'en': { 94 | 'actionName': 'Clearing', 95 | 'template': 'WhaleEx completed trade clearing, awaiting settlement.' 96 | }, 97 | 'zh': { 98 | 'actionName': '清算', 99 | 'template': 'WhaleEx完成了一批交易的清算, 等待结算' 100 | } 101 | }, 102 | 'settlement': { 103 | 'en': { 104 | 'actionName': 'Settlement', 105 | 'template': 'WhaleEx completed trade settlement. Assets have been exchanged.' 106 | }, 107 | 'zh': { 108 | 'actionName': '结算', 109 | 'template': 'WhaleEx完成了一批交易的结算, 资产完成转移' 110 | } 111 | } 112 | } 113 | --------------------------------------------------------------------------------