I’m using OZ test environment example, but useGSN
doesn’t work. Funds are still debited from the sender.
const { accounts, contract, web3 } = require("@openzeppelin/test-environment");
const gsn = require("@openzeppelin/gsn-helpers");
const Counter = contract.fromArtifact("Counter");
const Recipient = contract.fromArtifact("Recipient");
const IRelayHub = contract.fromArtifact("IRelayHub");
describe("GSNRecipient", function() {
const [sender] = accounts;
before(async function() {
await gsn.deployRelayHub(web3);
await gsn.runRelayer(web3, { quiet: true });
});
beforeEach(async function() {
this.counter = await Counter.new();
this.recipient = await Recipient.new(this.counter.address);
});
context("when called directly", function() {
it("setOwner", async function() {
const senderPreBalance = await web3.eth.getBalance(sender);
console.log("senderPreBalance: ", senderPreBalance.toString());
await this.recipient.setOwner(this.counter.address, {
from: sender,
});
const senderPostBalance = await web3.eth.getBalance(sender);
console.log("senderPostBalance: ", senderPostBalance.toString());
});
});
context("when relay-called", function() {
beforeEach(async function() {
await gsn.fundRecipient(web3, { recipient: this.recipient.address });
this.relayHub = await IRelayHub.at(
"0xD216153c06E857cD7f72665E0aF1d7D82172F494"
);
});
it("setOwner", async function() {
const recipientPreBalance = await this.relayHub.balanceOf(
this.recipient.address
);
console.log("recipientPreBalance: ", recipientPreBalance.toString());
const senderPreBalance = await web3.eth.getBalance(sender);
console.log("senderPreBalance: ", senderPreBalance.toString());
await this.recipient.setOwner(this.counter.address, {
from: sender,
useGSN: true,
});
const senderPostBalance = await web3.eth.getBalance(sender);
console.log("senderPostBalance: ", senderPostBalance.toString());
const recipientPostBalance = await this.relayHub.balanceOf(
this.recipient.address
);
console.log("recipientPostBalance: ", recipientPostBalance.toString());
});
});
});
Output
:
GSNRecipient
Starting relayer
/Users/user/Library/Caches/gsn-nodejs/gsn-relay-v0.2.1
-Port 8090
-Url localhost:8090
-GasPricePercent 0
-Workdir /var/folders/bw/w2nzhsf11qg8f3s1vnbyy0zr0000gn/T/tmp-89624Wr6XbCVieWtF
-DevMode
`when called directly`
2020/07/07 21:54:04 RelayHttpServer.go:44: RelayHttpServer starting. version: 0.4.1
2020/07/07 21:54:04 RelayHttpServer.go:211: Using RelayHub address: 0x537F27a04470242ff6b2c3ad247A05248d0d27CE
2020/07/07 21:54:04 RelayHttpServer.go:212: Using workdir: /var/folders/bw/w2nzhsf11qg8f3s1vnbyy0zr0000gn/T/tmp-89624Wr6XbCVieWtF
2020/07/07 21:54:04 RelayHttpServer.go:214: Using dev mode
2020/07/07 21:54:04 RelayHttpServer.go:222: Constructing relay server in url localhost:8090
2020/07/07 21:54:04 utils.go:40: ks accounts len 0
`senderPreBalance: 100000000000000000000`
`senderPostBalance: 99999448880000000000`
✓ setOwner (105ms)
`when relay-called`
2020/07/07 21:54:05 utils.go:66: key extracted. addr: 0xbf8069F88A62a0B5d859997f7aEd433389D279dF
2020/07/07 21:54:05 RelayHttpServer.go:224: relay server address: 0xbf8069F88A62a0B5d859997f7aEd433389D279dF
2020/07/07 21:54:05 RelayHttpServer.go:62: RelayHttpServer started. Listening on port: 8090
2020/07/07 21:54:05 RelayHttpServer.go:65: listen tcp :8090: bind: address already in use
`recipientPreBalance: 1000000000000000000`
`senderPreBalance: 99999448880000000000`
`senderPostBalance: 99998897760000000000`
`recipientPostBalance: 1000000000000000000`
✓ setOwner (181ms)
2 passing (2s)
Solution
: I didn’t use the environment settings.