@btc-vision/btc-runtime 1.9.11 → 1.9.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@btc-vision/btc-runtime",
3
- "version": "1.9.11",
3
+ "version": "1.9.12",
4
4
  "description": "Bitcoin Smart Contract Runtime",
5
5
  "main": "btc/index.ts",
6
6
  "scripts": {
@@ -402,7 +402,7 @@ export abstract class OP20 extends ReentrancyGuard implements IOP20 {
402
402
  return senderMap.get(spender);
403
403
  }
404
404
 
405
- protected _transfer(from: Address, to: Address, amount: u256, emitEvent: boolean = true): void {
405
+ protected _transfer(from: Address, to: Address, amount: u256): void {
406
406
  if (from === Address.zero() || from === Address.dead()) {
407
407
  throw new Revert('Invalid sender');
408
408
  }
@@ -421,22 +421,17 @@ export abstract class OP20 extends ReentrancyGuard implements IOP20 {
421
421
  const toBal: u256 = this.balanceOfMap.get(to);
422
422
  this.balanceOfMap.set(to, SafeMath.add(toBal, amount));
423
423
 
424
- if (emitEvent) {
425
- this.createTransferredEvent(Blockchain.tx.sender, from, to, amount);
426
- }
424
+ this.createTransferredEvent(Blockchain.tx.sender, from, to, amount);
427
425
  }
428
426
 
429
427
  protected _safeTransfer(from: Address, to: Address, amount: u256, data: Uint8Array): void {
430
- this._transfer(from, to, amount, false);
428
+ this._transfer(from, to, amount);
431
429
 
432
430
  if (Blockchain.isContract(to)) {
433
431
  // In CALLBACK mode, the guard allows depth up to 1
434
432
  // In STANDARD mode, the guard blocks all reentrancy
435
433
  this._callOnOP20Received(from, to, amount, data);
436
434
  }
437
-
438
- // Fire event at the end if everything succeeded indicating a successful transfer
439
- this.createTransferredEvent(Blockchain.tx.sender, from, to, amount);
440
435
  }
441
436
 
442
437
  protected _spendAllowance(owner: Address, spender: Address, amount: u256): void {
@@ -10,6 +10,8 @@ import {
10
10
  U32_BYTE_LENGTH,
11
11
  } from '../utils';
12
12
 
13
+ export const transferSignature = 'transfer(address,uint256)';
14
+ export const transferFromSignature = 'transferFrom(address,address,uint256)';
13
15
  export const SafeTransferSignature = 'safeTransfer(address,uint256,bytes)';
14
16
  export const SafeTransferFromSignature = 'safeTransferFrom(address,address,uint256,bytes)';
15
17
  export const IncreaseAllowanceSignature = 'increaseAllowance(address,uint256)';
@@ -26,14 +28,22 @@ export class TransferHelper {
26
28
  }
27
29
 
28
30
  public static get TRANSFER_SELECTOR(): Selector {
29
- return encodeSelector(SafeTransferSignature);
31
+ return encodeSelector(transferSignature);
30
32
  }
31
33
 
32
34
  public static get TRANSFER_FROM_SELECTOR(): Selector {
35
+ return encodeSelector(transferFromSignature);
36
+ }
37
+
38
+ public static get SAFE_TRANSFER_SELECTOR(): Selector {
39
+ return encodeSelector(SafeTransferSignature);
40
+ }
41
+
42
+ public static get SAFE_TRANSFER_FROM_SELECTOR(): Selector {
33
43
  return encodeSelector(SafeTransferFromSignature);
34
44
  }
35
45
 
36
- public static safeIncreaseAllowance(token: Address, spender: Address, amount: u256): void {
46
+ public static increaseAllowance(token: Address, spender: Address, amount: u256): void {
37
47
  const calldata = new BytesWriter(
38
48
  SELECTOR_BYTE_LENGTH + ADDRESS_BYTE_LENGTH + U256_BYTE_LENGTH,
39
49
  );
@@ -44,7 +54,7 @@ export class TransferHelper {
44
54
  Blockchain.call(token, calldata);
45
55
  }
46
56
 
47
- public static safeDecreaseAllowance(token: Address, spender: Address, amount: u256): void {
57
+ public static decreaseAllowance(token: Address, spender: Address, amount: u256): void {
48
58
  const calldata = new BytesWriter(
49
59
  SELECTOR_BYTE_LENGTH + ADDRESS_BYTE_LENGTH + U256_BYTE_LENGTH,
50
60
  );
@@ -55,6 +65,42 @@ export class TransferHelper {
55
65
  Blockchain.call(token, calldata);
56
66
  }
57
67
 
68
+ public static transfer(
69
+ token: Address,
70
+ to: Address,
71
+ amount: u256
72
+ ): void {
73
+ const calldata = new BytesWriter(
74
+ SELECTOR_BYTE_LENGTH +
75
+ ADDRESS_BYTE_LENGTH +
76
+ U256_BYTE_LENGTH
77
+ );
78
+ calldata.writeSelector(this.TRANSFER_SELECTOR);
79
+ calldata.writeAddress(to);
80
+ calldata.writeU256(amount);
81
+
82
+ Blockchain.call(token, calldata);
83
+ }
84
+
85
+ public static transferFrom(
86
+ token: Address,
87
+ from: Address,
88
+ to: Address,
89
+ amount: u256
90
+ ): void {
91
+ const calldata = new BytesWriter(
92
+ SELECTOR_BYTE_LENGTH +
93
+ ADDRESS_BYTE_LENGTH * 2 +
94
+ U256_BYTE_LENGTH
95
+ );
96
+ calldata.writeSelector(this.TRANSFER_FROM_SELECTOR);
97
+ calldata.writeAddress(from);
98
+ calldata.writeAddress(to);
99
+ calldata.writeU256(amount);
100
+
101
+ Blockchain.call(token, calldata);
102
+ }
103
+
58
104
  public static safeTransfer(
59
105
  token: Address,
60
106
  to: Address,
@@ -68,7 +114,7 @@ export class TransferHelper {
68
114
  U32_BYTE_LENGTH +
69
115
  data.length,
70
116
  );
71
- calldata.writeSelector(this.TRANSFER_SELECTOR);
117
+ calldata.writeSelector(this.SAFE_TRANSFER_SELECTOR);
72
118
  calldata.writeAddress(to);
73
119
  calldata.writeU256(amount);
74
120
  calldata.writeBytesWithLength(data);
@@ -104,7 +150,7 @@ export class TransferHelper {
104
150
  U32_BYTE_LENGTH +
105
151
  data.length,
106
152
  );
107
- calldata.writeSelector(this.TRANSFER_FROM_SELECTOR);
153
+ calldata.writeSelector(this.SAFE_TRANSFER_FROM_SELECTOR);
108
154
  calldata.writeAddress(from);
109
155
  calldata.writeAddress(to);
110
156
  calldata.writeU256(amount);