code: func (s *GlobalStore) Put(addr common.Address, key []byte, data []byte) error {
  	s.mu.Lock()
  	defer s.mu.Unlock()
  
  	if i, found := s.nodeKeyIndex(addr, key); !found {
  		s.nodeKeys[addr] = append(s.nodeKeys[addr], nil)
  		copy(s.nodeKeys[addr][i+1:], s.nodeKeys[addr][i:])
  		s.nodeKeys[addr][i] = key
  	}
  
  	if i, found := s.keyNodeIndex(key, addr); !found {
  		k := string(key)
  		s.keyNodes[k] = append(s.keyNodes[k], addr)
  		copy(s.keyNodes[k][i+1:], s.keyNodes[k][i:])
  		s.keyNodes[k][i] = addr
  	}
  
  	if i, found := s.nodeIndex(addr); !found {
  		s.nodes = append(s.nodes, addr)
  		copy(s.nodes[i+1:], s.nodes[i:])
  		s.nodes[i] = addr
  	}
  
  	if i, found := s.keyIndex(key); !found {
  		s.keys = append(s.keys, nil)
  		copy(s.keys[i+1:], s.keys[i:])
  		s.keys[i] = key
  	}
  
  	s.data[string(key)] = data
  
  	return nil
  }
docs: // Put saves the chunk data for node with address addr.