Beispiel #1
0
// Renew will handle renewing (or updating) a name that is already
// owned by acc on the Zooko server.
func (c *Client) Renew(name string, reg *Registration, acc *account.Account) error {
	jsonRegistration, err := json.Marshal(reg)
	if err != nil {
		return err
	}

	if err := c.checkAccountBalance(acc, false); err != nil {
		return err
	}

	nameUpdate, err := acc.CreateNameUpdate(name, string(jsonRegistration))
	if err != nil {
		return err
	}

	nameUpdateBytes := &bytes.Buffer{}
	if err := nameUpdate.Serialize(nameUpdateBytes); err != nil {
		return err
	}

	updateMsg, err := message.CreateMessage(&message.RenewName{
		Name:       &name,
		Value:      jsonRegistration,
		NameUpdate: nameUpdateBytes.Bytes(),
	}, c.Origin, config.ServerAddress())
	if err != nil {
		return err
	}

	if err := c.getRegistrationResponse(updateMsg); err != nil {
		return err
	}

	// Commit to the transaction since the server accepted it.
	acc.Commit(nameUpdate)

	return nil
}