上个commit不够对,actorAddress 是在 packMe 中被赋值的,不需要提前检测。

This commit is contained in:
陆柯 2020-02-28 12:24:35 +08:00
parent 61318e8940
commit 9099da4ab9
2 changed files with 5 additions and 7 deletions

View File

@ -82,7 +82,7 @@ DAD.verifyHash = function (actionData) {
return typedAction.verifyHash()
}
MOM.validateMe = function() { // Applicable on chain server. 子类应当覆盖本方法,静态的检查事务内容的格式和语义是否符合该子类事务的特性要求。To validate an action's content format.
MOM.validateMe = function() { // Applicable on both client and chain server. 子类应当覆盖本方法,静态的检查事务内容的格式。不能检查 balance 等需要全链数据库的东西,因为本方法也要用在前端检查。
// to implement in subclasses: 检查子类事务内容的格式
let typedAction = new wo[this.type](this)
return typedAction.validateMe()
@ -124,11 +124,11 @@ DAD._initTypeDict = function(typedActionDict) {
}
DAD.build = async function (action, keypair) { // Applicable on client. 客户端调用 Action.build即可新建、并打包成一个完整的子事务不需要亲自调用 constructor, packMe 等方法。
if (action && action.type && keypair && keypair.seckey && keypair.pubkey) {
if (action && action.type && keypair && keypair.seckey && keypair.pubkey && ticCrypto.seckey2pubkey(keypair.seckey)===keypair.pubkey) {
let typedAction = new wo[action.type](action)
typedAction.actorPubkey = keypair.pubkey
if (typedAction.validateMe()) {
await typedAction.packMe(keypair)
await typedAction.packMe(keypair) // 在 packMe 里,会把 actorPubkey 转存为 actorAddress。
return typedAction
}
}

View File

@ -13,10 +13,8 @@ MOM.__proto__ = Action.prototype
MOM.validateMe = function () {
// if (sender && sender.type !== 'multisig' && action.toAddress != action.actorAddress && sender.balance >= action.amount + action.fee){
return this.actorAddress && this.actorPubkey && ticCrypto.pubkey2address(this.actorPubkey)=== this.actorAddress // 必须检查发起人地址和公钥是匹配的,否则客户端能够造假
&& this.toAddress && this.toAddress != this.actorAddress
&& this.amount && this.amount > 0 && (this.fee >= 0)
return this.actorPubkey && this.toAddress && ticCrypto.pubkey2address(this.actorPubkey)!== this.toAddress // 不能转帐给自己。
&& this.amount && this.amount > 0 && (this.fee >= 0)
}
MOM.executableMe = async function() {