mirror of
https://github.com/AthanorLabs/atomic-swap.git
synced 2026-01-10 06:38:04 -05:00
update alice.NotifyClaimed
This commit is contained in:
@@ -119,9 +119,8 @@ func (a *alice) SetBobKeys(sk *monero.PublicKey, vk *monero.PrivateViewKey) {
|
||||
}
|
||||
|
||||
func (a *alice) DeployAndLockETH(amount uint) (ethcommon.Address, error) {
|
||||
|
||||
pkAlice := a.pubkeys.SpendKey().Bytes()
|
||||
pkBob := a.bobSpendKey.Bytes()
|
||||
pkAlice := reverse(a.pubkeys.SpendKey().Bytes())
|
||||
pkBob := reverse(a.bobSpendKey.Bytes())
|
||||
|
||||
var pka, pkb [32]byte
|
||||
copy(pka[:], pkAlice)
|
||||
@@ -209,19 +208,19 @@ func (a *alice) Refund() error {
|
||||
From: a.auth.From,
|
||||
Signer: a.auth.Signer,
|
||||
}
|
||||
secret := a.privkeys.Bytes()
|
||||
secret := a.privkeys.SpendKeyBytes()
|
||||
s := big.NewInt(0).SetBytes(secret)
|
||||
_, err := a.contract.Refund(txOpts, s)
|
||||
return err
|
||||
}
|
||||
|
||||
func (a *alice) CreateMoneroWallet(kpB *monero.PrivateKeyPair) (monero.Address, error) {
|
||||
func (a *alice) CreateMoneroWallet(kpAB *monero.PrivateKeyPair) (monero.Address, error) {
|
||||
// got Bob's secret
|
||||
skAB := monero.SumPrivateSpendKeys(kpB.SpendKey(), a.privkeys.SpendKey())
|
||||
vkAB := monero.SumPrivateViewKeys(kpB.ViewKey(), a.privkeys.ViewKey())
|
||||
kpAB := monero.NewPrivateKeyPair(skAB, vkAB)
|
||||
// skAB := monero.SumPrivateSpendKeys(kpB.SpendKey(), a.privkeys.SpendKey())
|
||||
// vkAB := monero.SumPrivateViewKeys(kpB.ViewKey(), a.privkeys.ViewKey())
|
||||
// kpAB := monero.NewPrivateKeyPair(skAB, vkAB)
|
||||
|
||||
if err := a.client.GenerateFromKeys(kpAB, "alice-swap-wallet", ""); err != nil {
|
||||
if err := a.client.GenerateFromKeys(kpAB, "alice-swap-wallet-0", ""); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
@@ -249,6 +248,31 @@ func (a *alice) NotifyClaimed(txHash string) (monero.Address, error) {
|
||||
return "", err
|
||||
}
|
||||
|
||||
fmt.Println("got Bob's secret!", res[0].(*big.Int), hex.EncodeToString(res[0].(*big.Int).Bytes()))
|
||||
return "", nil
|
||||
fmt.Println("got Bob's secret!", hex.EncodeToString(res[0].(*big.Int).Bytes()))
|
||||
|
||||
// got Bob's secret
|
||||
sbBytes := res[0].(*big.Int).Bytes()
|
||||
var sb [32]byte
|
||||
copy(sb[:], sbBytes)
|
||||
|
||||
skB, err := monero.NewPrivateSpendKey(sb[:])
|
||||
if err != nil {
|
||||
fmt.Printf("failed to convert Bob's secret into a key: %s\n", err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
skAB := monero.SumPrivateSpendKeys(skB, a.privkeys.SpendKey())
|
||||
kpAB, err := skAB.AsPrivateKeyPair()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return a.CreateMoneroWallet(kpAB)
|
||||
}
|
||||
|
||||
func reverse(s []byte) []byte {
|
||||
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
|
||||
s[i], s[j] = s[j], s[i]
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
@@ -256,8 +256,9 @@ func (b *bob) ClaimFunds() (string, error) {
|
||||
From: b.auth.From,
|
||||
Signer: b.auth.Signer,
|
||||
}
|
||||
|
||||
// call swap.Swap.Claim() w/ b.privkeys.sk, revealing Bob's secret spend key
|
||||
secret := b.privkeys.Bytes()
|
||||
secret := b.privkeys.SpendKeyBytes()
|
||||
s := big.NewInt(0).SetBytes(secret)
|
||||
tx, err := b.contract.Claim(txOpts, s)
|
||||
if err != nil {
|
||||
@@ -274,6 +275,13 @@ func (b *bob) ClaimFunds() (string, error) {
|
||||
|
||||
//fmt.Println("tx logs: ", fmt.Sprintf("0x%x", receipt.Logs[0].Data))
|
||||
fmt.Println("included in block number: ", receipt.Logs[0].BlockNumber)
|
||||
fmt.Println("expected secret: ", fmt.Sprintf("0x%x", secret), s)
|
||||
fmt.Println("secret: ", fmt.Sprintf("%x", secret))
|
||||
return tx.Hash().String(), nil
|
||||
}
|
||||
|
||||
func reverse(s []byte) []byte {
|
||||
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
|
||||
s[i], s[j] = s[j], s[i]
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
10
cmd/alice.go
10
cmd/alice.go
@@ -111,7 +111,7 @@ func (n *node) handleMessageAlice(who peer.ID, msg net.Message, setupDone chan s
|
||||
fmt.Printf("Bob claimed ether! got secret: %v", kp)
|
||||
address, err := n.alice.CreateMoneroWallet(kp)
|
||||
if err != nil {
|
||||
fmt.Println("failed to create monero address: %w", err)
|
||||
fmt.Println("failed to create monero address: %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -147,10 +147,14 @@ func (n *node) handleMessageAlice(who peer.ID, msg net.Message, setupDone chan s
|
||||
|
||||
//close(setupDone)
|
||||
case *net.NotifyClaimed:
|
||||
_, err := n.alice.NotifyClaimed(msg.TxHash)
|
||||
address, err := n.alice.NotifyClaimed(msg.TxHash)
|
||||
if err != nil {
|
||||
fmt.Println("failed to create monero address: %w", err)
|
||||
fmt.Printf("failed to create monero address: %s\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Printf("successfully created monero wallet from our secrets: address=%s", address)
|
||||
// TODO: get and print balance
|
||||
default:
|
||||
return errors.New("unexpected message type")
|
||||
}
|
||||
|
||||
@@ -38,8 +38,7 @@ func (c *client) Transfer(to Address, accountIdx, amount uint) error {
|
||||
}
|
||||
|
||||
func (c *client) GenerateFromKeys(kp *PrivateKeyPair, filename, password string) error {
|
||||
address := kp.Address()
|
||||
return c.callGenerateFromKeys(kp.sk, kp.vk, address, filename, password)
|
||||
return c.callGenerateFromKeys(kp.sk, kp.vk, kp.Address(), filename, password)
|
||||
}
|
||||
|
||||
func (c *client) GetAddress(idx uint) (*getAddressResponse, error) {
|
||||
|
||||
@@ -113,7 +113,7 @@ func (kp *PrivateKeyPair) AddressBytes() []byte {
|
||||
return addr
|
||||
}
|
||||
|
||||
func (kp *PrivateKeyPair) Bytes() []byte {
|
||||
func (kp *PrivateKeyPair) SpendKeyBytes() []byte {
|
||||
return kp.sk.key.Bytes()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user