Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@ <h6 class="card-subtitle mb-2 text-muted">
<p class="card-text">
Token Balance: {{ tokenBalance ? tokenBalance : "0" }} LTO
</p>
<!-- <p class="card-text">Bet Price: {{ betPrice }} ETH</p>
<p class="card-text">Bet Fee: {{ betFee }} ETH</p>
<p class="card-text">Bets Open?: {{ betsOpen }}</p>
<p class="card-text">Closing Time: {{ betsClosingTime }}</p> -->
</div>
</div>
</div>
Original file line number Diff line number Diff line change
@@ -1 +1,44 @@
<h1>OWNER INTERACTIONS!</h1>
<div *ngIf="isOwner">
<div class="card my-4">
<div class="card-body">
<h5 class="card-title">Owner Information</h5>
<h6 class="card-subtitle mb-2 text-muted">
<a href="https://goerli.etherscan.io/address/{{ walletAddress }}">{{
walletAddress
}}</a>
</h6>
<!-- <div>
<button
type="button"
class="btn btn-success btn-lg px-4 gap-3"
(click)="isConnected()"
>
{{ walletAddress ? "Connected" : "Connect Wallet" }}
</button>
</div> -->

<p class="card-text">Bets Open: {{ betsOpen }}</p>
<p class="card-text">Are you the owner: {{ isOwner }}</p>
<div *ngIf="lotteryContract" class="my-4">
<p>Open Bets</p>
<input
#valueInput
class="input"
type="number"
placeholder="seconds"
min="1"
max="100000000000"
/>
<br />
<button
type="button"
class="btn btn-danger btn-lg px-4 gap-3 my-4"
(click)="openBets(valueInput.value.toString())"
>
Set Time
</button>
</div>
<p class="card-text">Closing Time: {{ betsClosingTime }}</p>
</div>
</div>
</div>
Original file line number Diff line number Diff line change
@@ -1,12 +1,101 @@
import { Component } from '@angular/core';
import { BigNumber, Contract, ethers } from 'ethers';
import lotteryJson from '../../assets/Lottery.json';

const LOTTERY_CONTRACT_ADDRESS = '0x6354dA7FbCc203D49cEC938727A9A97a4c80bDE7';

@Component({
selector: 'owner-interactions',
templateUrl: './ownerInteractions.component.html',
providers: []
providers: [],
})
export class OwnerInteractions {
walletSigner: ethers.providers.JsonRpcSigner | undefined;
provider: ethers.providers.Web3Provider | undefined;
lotteryContract: Contract | undefined;
lotteryAddress: string | undefined;
betsOpen: boolean | undefined;
betsClosingTime: number | undefined;
contractOwner: string | undefined;
walletAddress: string | undefined;
isOwner: boolean | undefined;

constructor() {
this.provider = new ethers.providers.Web3Provider(window.ethereum, 'any');
}

async ngOnInit() {
this.lotteryAddress = LOTTERY_CONTRACT_ADDRESS;
this.lotteryContract = new Contract(
this.lotteryAddress,
lotteryJson.abi,
this.walletSigner ?? this.provider
);

this.connectWallet();
this.checkOwner();
// Are bets open?
this.lotteryContract['betsOpen']().then((isOpen: boolean) => {
this.betsOpen = isOpen;
});

// Bets closing time
this.lotteryContract['betsClosingTime']().then((closingTime: number) => {
const betsClosingTimeStr = ethers.utils.formatEther(closingTime);
this.betsClosingTime = parseFloat(betsClosingTimeStr);
});
}

async connectWallet(): Promise<void> {
if (typeof window.ethereum !== 'undefined') {
try {
await window.ethereum
.request({ method: 'eth_requestAccounts' })
.then((address: any) => {
this.walletAddress = address[0];
this.walletSigner = this.provider!.getSigner(this.walletAddress);
})
.catch((error: any) => {
if (error.code === 4001) {
console.log('User rejected');
}
return console.log('we found our error', error);
});
} catch {}
}
}

async isConnected() {
const accounts = await window.ethereum.request({ method: 'eth_accounts' });
if (accounts.length) {
this.walletAddress = accounts[0];
this.walletSigner = this.provider!.getSigner(accounts[0]);
} else {
this.connectWallet();
}
}

async openBets(value: string): Promise<void> {
if (this.lotteryContract) {
const currentBlock = this.provider?.getBlock('latest');
if (currentBlock) {
this.lotteryContract['openBets']().then(
(await currentBlock).timestamp + Number(value)
);
}
}
}

checkOwner() {
if (this.lotteryContract) {
this.lotteryContract['owner']().then((ownerAddres: string) => {
this.contractOwner = ownerAddres;
});
if (this.walletAddress === this.contractOwner) {
this.isOwner = true;
} else {
this.isOwner = false;
}
}
}
}